Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    sommare array multidimensionali

    ciao a tutti

    io ho un array multidimensionale

    codice:
    [1] [mese] => 10
         [valore] => 156
    [2] [mese] => 8
         [valore] => 251
    [3] [mese] => 3
         [valore] => 147
    [4] [mese] => 10
         [valore] => 369
    ecc
    vorrei eseguire la somma dei valori a parità di mese....
    Griggio Claudio

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Troppo semplice

    Supposto $array il tuo array dati, in $result avrai un array la cui chiave è il mese e il valore la sommatoria

    Codice PHP:
    <?php
    $array
    =array(
        array(
    'mese'=>1'valore'=>140),
        array(
    'mese'=>2'valore'=>10),
        array(
    'mese'=>3'valore'=>40),
        array(
    'mese'=>1'valore'=>540),
        array(
    'mese'=>4'valore'=>160),
        array(
    'mese'=>5'valore'=>170),
        array(
    'mese'=>4'valore'=>80),
        array(
    'mese'=>5'valore'=>90)
            );
    $result=array();
    foreach (
    $array as $value
        if(isset(
    $result[$value['mese']]))
            
    $result[$value['mese']]+=$value['valore'];
        else
            
    $result[$value['mese']]=$value['valore'];

    print_r($result);
    ?>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Originariamente inviato da Grino
    Troppo semplice

    Supposto $array il tuo array dati, in $result avrai un array la cui chiave è il mese e il valore la sommatoria

    Codice PHP:
    <?php
    $array
    =array(
        array(
    'mese'=>1'valore'=>140),
        array(
    'mese'=>2'valore'=>10),
        array(
    'mese'=>3'valore'=>40),
        array(
    'mese'=>1'valore'=>540),
        array(
    'mese'=>4'valore'=>160),
        array(
    'mese'=>5'valore'=>170),
        array(
    'mese'=>4'valore'=>80),
        array(
    'mese'=>5'valore'=>90)
            );
    $result=array();
    foreach (
    $array as $value
        if(isset(
    $result[$value['mese']]))
            
    $result[$value['mese']]+=$value['valore'];
        else
            
    $result[$value['mese']]=$value['valore'];

    print_r($result);
    ?>
    Così si può evitare anche l'if:

    Codice PHP:
    <?php
    $array
    =array(
        array(
    'mese'=>1'valore'=>140),
        array(
    'mese'=>2'valore'=>10),
        array(
    'mese'=>3'valore'=>40),
        array(
    'mese'=>1'valore'=>540),
        array(
    'mese'=>4'valore'=>160),
        array(
    'mese'=>5'valore'=>170),
        array(
    'mese'=>4'valore'=>80),
        array(
    'mese'=>5'valore'=>90)
            );
    $result=array();
    foreach (
    $array as $value) {
        @ 
    $result[$value['mese']]+=$value['valore'];
    }
    print_r($result);
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Chiedo scusa ma credo che io abbia un errore nella popolazione dell'array

    codice:
    $scadenze = array();
    
    chiamata a mysql......
    
    while ($rowMesi = mysql_fetch_array($resultMesi)) {
    $mese = $rowMesi['mese']; 
    $valore = $rowMesi['inconsegna']; 
    $scadenze[] = array('mese' => $mese, 'valore' => $valore);
    }
    è corretto così?
    Griggio Claudio

  5. #5
    ho trovato questa soluzione, sembra che funzioni

    Codice PHP:
    array_push($scadenze, array('mese' => $mese'valore' => $valore)); 
    Griggio Claudio

  6. #6
    un'altra domanda:

    sarebbe tanto più complicato se l'array avrebbe una terza dimensione?

    codice:
    $array=array( 
    array('mese'=>1, 'valore'=>140, 'reparto'=> 'A'), 
    array('mese'=>2, 'valore'=>10 'reparto'=> 'B'), 
    array('mese'=>3, 'valore'=>40 'reparto'=> 'B'), 
    array('mese'=>1, 'valore'=>540 'reparto'=> 'A'), 
    array('mese'=>4, 'valore'=>160 'reparto'=> 'B'), 
    array('mese'=>5, 'valore'=>170 'reparto'=> 'A'), 
    array('mese'=>4, 'valore'=>80 'reparto'=> 'B'), 
    array('mese'=>5, 'valore'=>90 'reparto'=> 'A')
     );
    in pratica avere
    un risultato tipo

    mese1 | repA valore | repB valore
    mese2 | repA valore | repB valore
    mese3 | repA valore | repB valore
    ....
    Griggio Claudio

  7. #7
    Originariamente inviato da griggioclaudio
    sarebbe tanto più complicato se l'array avrebbe una terza dimensione?
    Se "avrebbe" fosse molto più complicato, se "avesse" fosse un po' più semplice...e bastasse modificare un po' lo script originale.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.