谁能够解释如何组合两个数组,以便生成包含前两个数据的所有字段的第三个数组?
//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`
答案 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);
答案 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沙箱以在线测试代码