我需要根据共享 ID 列值合并两个二维数组中的数据。将 NUM 值从第二个数组传输到第一个数组时,如果没有对应的行,则默认 NUM 值为 0。
$array1 = [
['ID' => 1],
['ID' => 2],
['ID' => 3],
['ID' => 4],
['ID' => 5],
];
$array2 = [
['ID' => 2, 'NUM' => 200],
['ID' => 4, 'NUM' => 400],
];
想要的结果:
[
['ID' => 1, 'NUM' => 0],
['ID' => 2, 'NUM' => 200],
['ID' => 3, 'NUM' => 0],
['ID' => 4, 'NUM' => 400],
['ID' => 5, 'NUM' => 0],
]
我尝试了
array_diff()
和array_intersect()
,但找不到正确的解决方案。
您可以循环遍历 array1 并为当前键添加 array2 的值,如果 array2 中未设置该键,则添加 0。
foreach ($array1 as $key => $value) {
if (array_key_exists($key, $array2) {
$array1[$key] = $array2[$key];
} else {
$array1[$key] = 0;
}
}
为了避免第二个数组的低效迭代搜索,请填充关联查找/映射以允许即时值访问。如果在查找中没有找到 ID,则默认新元素为 0。
代码:(演示)
$array1 = [
['ID' => 1],
['ID' => 2],
['ID' => 3],
['ID' => 4],
['ID' => 5],
];
$array2 = [
['ID' => 2, 'NUM' => 200],
['ID' => 4, 'NUM' => 400],
];
$lookup = array_column($array2, null, 'ID');
var_export(
array_map(
fn($row) => $row + ($lookup[$row['ID']] ?? ['NUM' => 0]),
$array1
)
);