PHP联合两个数组合二为一

时间:2017-10-30 19:31:07

标签: php arrays

谁能够解释如何组合两个数组,以便生成包含前两个数据的所有字段的第三个数组?

//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 = CCC
    Impegno: string = 10
1: array =
   Codice: string = AAA
   Impegno: string = 12

我想得到的结果是

//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`

2 个答案:

答案 0 :(得分:0)

如果我理解正确你想要这样的东西:

$data = [ 
    [
   'Codice' => 'AAA',
   'Descrizione' => 'descrizione AAA',
    'Giacenza' => 90,
     ],
    [
   'Codice' => 'BBB',
   'Descrizione' => 'descrizione BBB',
    'Giacenza' => 9,
     ],
    [
   'Codice' => 'CCC',
   'Descrizione' => 'descrizione CC',
    'Giacenza' => 19,
     ],
 ];

$data2 = [
    [
    'Codice' => 'CCC',
    'Impegno' => 10,
    ],
    [
     'Codice' => 'AAA',
     'Impegno' => 12,
    ],
         ];

$impegnoByCodice = array_combine(array_column($data2, 'Codice'),
                                 array_column($data2, 'Impegno'));


array_walk($data, function(&$item) use(&$impegnoByCodice) {
                      $item['Impegno'] = $impegnoByCodice[$item['Codice']] ?? 0;
                  }
           );

var_dump($data);

Try it online

答案 1 :(得分:0)

您可以使用array_reduce函数创建联合数组,如下所示:

$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;

}, []);

// check if codice value exists in array and return its index or false otherwise
function codice_key($array, $value) {
    return array_search($value, array_column($array, 'Codice'));
}

我将here设置为php沙箱以在线测试代码