Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di blob696
    Registrato dal
    Feb 2007
    Messaggi
    119

    array_merge() che sommi i valori nel caso di chiavi uguali

    avrei bisogno di unire due array con chiavi associative e valori numerici.

    con array_merge() lo fà, solo che mi sostituisce i valori delle chiavi identiche, io vorrei invece sommarle.

    esempio:

    Codice PHP:
    $array_A['primo'] = 1000;
    $array_A['secondo'] = 1000;
    $array_A['terzo'] = 1000;

    $array_B['primo'] = 2000;
    $array_B['secondo'] = 2000;
    $array_B['quarto'] = 1000;

    //se do l'istruzione:

    $merge_array array_merge($array_A,$array_B);
    print_r ($merge_array);

    //mi restituisce:

    Array ( [primo] => 2000 [secondo] => 2000 [terzo] => 1000 [quarto] => 1000 )

    // ed è giusto che sia così. 
    ma se io invece di far sostituire i valori con chiavi uguali vorrei che si sommassero?
    cioè che il risultato della funzione sia:

    Codice PHP:
    Array ( [primo] => 3000 [secondo] => 3000 [terzo] => 1000 [quarto] => 1000 
    come dovrei fare?

    con array_merge_recursive ($array_A,$array_B);

    mi mantiene tutti i valori

    Codice PHP:
    //risultato
    Array ( [primo] => Array ( [0] => 1000 [1] => 2000 ) [secondo] => Array ( [0] => 1000 [1] => 2000 ) [terzo] => 1000 [quarto] => 1000 

    e poi che faccio?

    dovrei estrapolare le sub array e trasformare le chiavi associative dell'array principale in matrici, in modo che poi con -- array_sum() -- potrei arrivare al mio scopo.

    Ma ho paura che mi stia incasinando (sarà l'ora )

    qualcuno ha una dritta?

    ringrazio sempre
    Giuseppe

  2. #2
    Codice PHP:
    function merge_sum($a$b) {
        foreach ( 
    $b as $key => $val ) {
            if ( isset(
    $a[$key]) ) {
                
    $a[$key] += $val;
            } else {
                
    $a[$key] = $val;
            }
        }
        return 
    $a;


  3. #3
    Ciao, potresti fare in questo modo:

    $array_A ['primo'] = 1000;
    $array_A ['secondo'] = 1000;
    $array_A ['terzo'] = 1000;

    $array_B ['primo'] = 2000;
    $array_B ['secondo'] = 2000;
    $array_B ['quarto'] = 1000;


    foreach ( $array_A as $key => $value ) { // scorri il primo array
    if (key_exists($key,$array_B)) { // se la chiave corrente esiste nel secondo array
    $array_A [$key] += $array_B [$key];//aggiungi al valore corrente il valore del secondo array
    unset($array_B [$key]); // elimini la chiave del secondo array
    }
    }

    $merge_array = array_merge($array_A,$array_B);
    print_r($merge_array);
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  4. #4
    Utente di HTML.it L'avatar di blob696
    Registrato dal
    Feb 2007
    Messaggi
    119
    grazie ragazzi.

    Ho già provato la prima soluzione e sembra funzionare domattina proverò la seconda.

    Un altra domanda sulla funzione merge_sum()

    se gli array da unire non fossero due ma un numero che non conosco, cioè che possano variare da 2 a 5 in base alla scelta degli utenti, come modifico la funzione?

    Ci proverò anche io domani, ormai sono cotto.

    Intanto grazie.

    saluti

    Giuseppe

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.