在PHP中合并两个数组

时间:2010-05-22 22:51:37

标签: php arrays join merge

我正在尝试从两个当前数组创建一个新数组。试过array_merge,但它不会给我我想要的东西。 $array1是我传递给函数的键列表。 $array2保存该函数的结果,但不包含任何不可用的键结果。所以,我想确保所有请求的密钥都带有'null':ed值,如显示的$result数组所示。

它有点像这样:

$array1 = array('item1', 'item2', 'item3', 'item4');

$array2 = array(
    'item1' => 'value1',
    'item2' => 'value2',
    'item3' => 'value3'
);

这是我想要的结果:

$result = array(
    'item1' => 'value1',
    'item2' => 'value2',
    'item3' => 'value3',
    'item4' => ''  
);

可以这样做,但我不认为这是一个很好的解决方案 - 我真的不喜欢通过在代码中添加@:s来轻松解决PHP错误。根据示例,此示例显然会抛出错误,因为'item4'不在$array2中。

foreach ($keys as $k => $v){
    @$array[$v] = $items[$v]; 
}

那么,实现相同结果的最快(性能)方法是什么?

6 个答案:

答案 0 :(得分:5)

array_fill_keys将为您构建一个可以在array_merge中使用的精美数组:

array_merge(array_fill_keys($array1, ''), $array2);

或者,您可以使用执行联合的+ op代替array_merge:

$array2 + array_fill_keys($array1, '');

这个使用数字键或混合数字/字符串:)

答案 1 :(得分:1)

使用array_key_exists

检查密钥是否退出,而不是抛出错误
<?php
 foreach($array1 as $key) {
    if (array_key_exists($key, $array2)) {
        $result[$key] = $array2[$key];
    } else {
        $result[$key] = null;
    }
 }

答案 2 :(得分:0)

您可以使用array_merge()合并一个或多个数组。

答案 3 :(得分:0)

在这种情况下,您可以使用array_mergearray_fill_keys

$result = array_merge(
    array_array_fill_keys($array1,''),
    $array2
);

你应该知道,对于array_merge,只有当键不是数字时,后一个数组中的值才会覆盖第一个,因此,如果$ array1包含数值,则此方法将不起作用。例如,输入中包含以下值,此代码将无法正常工作:

$array1 = array(1,2,3);
$array2 = array("hi"=>"world",2=>"test","other"=>"empty");

将产生以下内容:

array(6) {
  [0]=>
  string(0) ""
  [1]=>
  string(0) ""
  [2]=>
  string(0) ""
  ["hi"]=>
  string(5) "world"
  [3]=>
  string(4) "test"
  ["other"]=>
  string(5) "empty"

}

如果你确定数组键都是文字,你可以使用它而不用担心

答案 4 :(得分:0)

如果它不起作用,你没有使用array_fill_keys或类似的函数返回一个数组类型,你可以转换为数组。

$array1 = (array)$array2 + (array)$array1;

答案 5 :(得分:-1)

你看过array_combine吗?这是一个链接:PHP reference

它似乎完全符合您的要求,但有一点需要注意:如果两个数组的大小不同,则无效。如果确保您的键数组总是比您的值数组长,那么您可以在调用array_combine之前将值数组填充为null值,直到两个数组的大小相等为止。