有两个数组需要合并两个数组并匹配它们的键,其余的应该为空。我已经尝试过
array_merge()
,array_diff()
,array_fill()
,但没有任何帮助。
阵列一
Array
(
[5] => PHM
[4] => ODM
[3] => N
[6] => M9
[10] => RDM9
)
数组2
Array
(
[0] => 01
[1] => 02
[2] => 03
[3] => 04
[4] => 05
[5] => 06
[6] => 07
[7] => 08
[8] => 09
[9] => 10
[10] => 11
[11] => 12
[12] => 13
)
最终输出
Array
(
[0] => null
[1] => null
[2] => null
[3] => N
[4] => ODM
[5] => PHM
[6] => M9
[7] => null
[8] => null
[9] => null
[10] => RDM9
[11] => null
[12] => null
)
使用第二个数组中的所有空值创建数组,并用第一个数组中的值替换
$arr2 = array_fill_keys(array_flip($arr2), null);
$new = array_replace($arr2, $arr1);
print_r($new);
您可以将数组 2 传递给 foreach 循环,并使用 if/else 语句检查数组 2 的键是否存在于数组 1 中,如果存在,则将元素
$output[$key]
的值设置为 NULL
,否则将值指定为$arr1[key]
foreach ($arr2 as $key=> $value){
$output[$key]=(!array_key_exists($key, $arr1)) ? NULL : $arr1[$key];
}
var_dump($output);
根据开发者的喜好,还有 3 种解决方案。 3 片段演示
清除第二个数组的所有值,然后替换第一个数组中的关联元素。
var_export(
array_replace(array_map(fn() => null, $arr2), $arr1)
);
对第二个数组的键进行功能迭代,并尝试将第一个数组中的映射值添加到结果数组或回退到 null。
var_export(
array_reduce(
array_keys($arr2),
fn($result, $k) => $result + [$k => $arr1[$k] ?? null],
[]
)
);
使用语言构造迭代第二个数组的键,并尝试将第一个数组中的映射值添加到结果数组或回退到 null。
$result = [];
foreach ($arr2 as $k => $_) {
$result[$k] = $arr1[$k] ?? null;
}
var_export($result);