[PHP] Merge array

greghph27

Nuovo Utente
21 Giu 2017
14
0
1
ciao
chi riesce gentilmente a spiegarmi come unire due array in modo tale da generarne un terzo che abbia tutti i campi dei primi due?

PHP:
//array1
$data: array =
0: array =
   Codice: string = AAA
   Descrizione: string = descrizione AAA
   Giacenza: string = 90
1: array =
   Codice: string = BBB
   Descrizione: string = descrizione BBB
   Giacenza: string = 9
2: array =
   Codice: string = CCC
   Descrizione: string = descrizione CC
   Giacenza: string = 19

//array 2
$data1: array =
0: array =
   Codice: string = AAA
   Impegno: string = 10
1: array =
   Codice: string = CCC
   Impegno: string = 12

il risultato che vorrei ottenere è
PHP:
//array unito
$unito array =
0: array =
   Codice: string = AAA
   Descrizione: string = descrizione AAA
   Giacenza: string = 90
   Impegno: string = 10
1: array =
   Codice: string = BBB
   Descrizione: string = descrizione BBB
   Giacenza: string = 9
   Impegno: string = 0
2: array =
   Codice: string = CCC
   Descrizione: string = descrizione CC
   Giacenza: string = 19
  Impegno: string = 12

grazie
 
non credo si possa trovare una funzione PHP già pronta,
prova la funzione sotto riportata, specifica per il tuo esempio,
con l'attenzione che l'array da integrare è la 2 e tutto il suo contenuto viene copiato nella 1
sovrapponendo nel caso esista già la "key"
ed escludendo i codici non trovati
PHP:
$result = myMergeArray($array_2, $array_1);

function myMergeArray ($array_2, $array_1)
{
    foreach ($array_2 as $sub_k2 => $sub_v2)
        foreach ($sub_v2 as $k2 => $v2)
            if( $k2 == "Codice" )
                foreach ($array_1 as $sub_k1 => $sub_v1)
                    foreach ($sub_v1 as $k1 => $v1)
                        if( $k1 == "Codice" )
                            if( $v2 == $v1 )
                                foreach ($sub_v2 as $copyk2 => $copyv2)
                                    $array_1[$sub_k1][$copyk2] = $copyv2;
    return $array_1;
}
upload_2017-10-30_21-47-55.png

upload_2017-10-30_21-48-35.png

upload_2017-10-30_21-49-13.png
 
ciao ho risolto cosi
Codice:
 $unito = array_reduce( $data, function ( $carry, $item ) use ($data1) {

    $key = codice_key($data1, $item['Codice']);
    if ( $key !== false ) {
        $carry[] = array_merge($item, $data1[$key]);
    } else {
        $carry[] = array_merge($item, [ 'Impegno' => 0 ]);
    }
    return $carry;

}, []);


function codice_key($array, $value) {
    return array_search($value, array_column($array, 'Codice'));
}
 

Discussioni simili