PHP合并2个具有不同数量元素的数组,$ key来自一个,$ values来自另一个

时间:2015-08-17 22:27:02

标签: php arrays merge

我想将2个数组合并在一起,这些数组具有不同数量的元素,使用一个键和另一个键匹配的值。尽管我希望保留原始数组中的结果空键,但包含所需值的数组可能包含较少的元素。例如:

//包含我想要保留的键的数组

$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);

//包含我想要使用的值的数组

$arr2 = array(01=>123, 03=>123, 05=>123, 07=>123, 09=>123, 11=>123);

//带有一些无价值元素的理想结果

$results = array(01=>123, 02, 03=>123, 04, 05=>123, 06, 07=>123, 08, 09=>123, 10, 11=>123, 12);

正如您所看到的,结果数组保留了12个元素,但仅将值应用于2个数组中的键匹配的位置。

我在其他PHP函数中尝试了$results = array_intersect_key($arr1 + $arr2, $arr2);以及:

for ($i=1; $i < count($arr1); $i++) {
    if (isset($arr2[$i])) {
        $arr3[] = $arr2[$i];
    } else {
        $arr3[] = $arr1[$i];
    }
}

print_r($arr3);

还没有运气。

提前致谢!

3 个答案:

答案 0 :(得分:2)

对于像这样的数组

[Export]

这应该有效。

$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$arr2 = array(1=>123, 3=>123, 5=>123, 7=>123, 9=>123, 11=>123);

或使用其他一些PHP函数:

foreach ($arr1 as $key) {
    $results[$key] = isset($arr2[$key]) ? $arr2[$key] : null;
}

答案 1 :(得分:1)

None

答案 2 :(得分:0)

首先将$arr1的值设置为false以仅保留键: $arr1 = array_fill_keys(array_keys($arr1), false);或者,如果您自己生成$arr1,请将其定义为:$arr1 = Array(false, false, false, false /* etc. */);

现在使用数组union运算符:

$result = $arr2 + $arr1;

  

+运算符返回附加到左侧数组的右侧数组;对于存在于两个数组中的键 - 来自文档:http://php.net/manual/en/language.operators.array.php

然后,如果需要按键排序数组:ksort($array);