通过键将值从一个平面数组映射到另一个平面数组,并在没有对应值的情况下回退到 null

问题描述 投票:0回答:3

有两个数组需要合并两个数组并匹配它们的键,其余的应该为空。我已经尝试过

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 
   )
php arrays mapping associative-array fallbackvalue
3个回答
5
投票

使用第二个数组中的所有空值创建数组,并用第一个数组中的值替换

$arr2 = array_fill_keys(array_flip($arr2), null);
$new = array_replace($arr2, $arr1);
print_r($new);

1
投票

您可以将数组 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);

0
投票

根据开发者的喜好,还有 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);
© www.soinside.com 2019 - 2024. All rights reserved.