如何将这两个数组合并在一起?
Array
(
[0] => Array
(
[id] => 5
[cnt] => 14
)
[1] => Array
(
[id] => 8
[cnt] => 2
)
)
Array
(
[0] => Array
(
[id] => 8
[binding] => hardcover
)
[1] => Array
(
[id] => 5
[binding] => softcover
)
)
预期结果是:
Array
(
[0] => Array
(
[id] => 5
[binding] => softcover
[cnt] => 14
)
[1] => Array
(
[id] => 8
[binding] => hardcover
[cnt] => 2
)
)
这两个数组的合并应该发生在 [id] 值上,而不是任何类型的数组上。我怎样才能用 php 快速地做到这一点?
$output = array();
$arrayAB = array_merge($arrayA, $arrayB);
foreach ( $arrayAB as $value ) {
$id = $value['id'];
if ( !isset($output[$id]) ) {
$output[$id] = array();
}
$output[$id] = array_merge($output[$id], $value);
}
var_dump($output);
如果您想重置输出的键,只需执行以下操作:
$output = array_values($output);
+
) 合并关联行数据。数组并集运算符只能与关联的非数字键控数组一起使用。第一次遇到给定的
id
时,结果数组中还没有“组”。为了避免尝试将行数据与未声明的变量合并而生成警告,请使用空合并运算符 (??
) 回退到空数组。
下面的代码片段非常高效,因为它不会进行迭代函数调用。
如果您不希望结果数组中包含第一级键,请调用
array_values()
重新索引数组。
代码:(演示)
$a1 = [
['id' => 5, 'cnt' => 14],
['id' => 8, 'cnt' => 2],
];
$a2 = [
['id' => 8, 'binding' => 'hardcover'],
['id' => 5, 'binding' => 'softcover'],
];
$result = [];
foreach (array_merge($a1, $a2) as $row) {
$result[$row['id']] = ($result[$row['id']] ?? []) + $row;
}
var_export(array_values($result));
输出:
array (
0 =>
array (
'id' => 5,
'cnt' => 14,
'binding' => 'softcover',
),
1 =>
array (
'id' => 8,
'cnt' => 2,
'binding' => 'hardcover',
),
)