在PHP中合并两个数组

在PHP中合并两个数组,php,arrays,join,merge,Php,Arrays,Join,Merge,我正在尝试从当前的两个数组创建一个新数组。尝试了数组合并,但它无法满足我的要求$array1是我传递给函数的键列表$array2保存该函数的结果,但不包含任何键的不可用结果。因此,我想确保所有请求的键都带有“null”:ed值,如所示的$result数组所示 有点像这样: $array1 = array('item1', 'item2', 'item3', 'item4'); $array2 = array( 'item1' => 'value1', 'item2' =&

我正在尝试从当前的两个数组创建一个新数组。尝试了数组合并,但它无法满足我的要求
$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]; 
}

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

您看过array\u combine吗?这里有一个链接:


它似乎完全符合您的要求,但有一点需要注意:如果两个数组的大小不相等,它将什么也不做。如果保证键数组总是比值数组长,则在调用array\u combine之前,您可以使用空值填充值数组,直到两个数组大小相等。

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

而不是抛出错误,请使用array\u key\u检查键是否存在

<?php
 foreach($array1 as $key) {
    if (array_key_exists($key, $array2)) {
        $result[$key] = $array2[$key];
    } else {
        $result[$key] = null;
    }
 }

array\u fill\u key
将为您构建一个很好的数组,您可以在
array\u merge
中使用它:

array_merge(array_fill_keys($array1, ''), $array2);
或者,您可以使用执行并集的
+
操作来代替数组合并:

$array2 + array_fill_keys($array1, '');
此选项适用于数字键或混合数字/字符串:)

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

您应该知道,使用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"
}


如果您确定数组键都是文本,那么您可以在不起作用的情况下使用它,例如不使用数组填充键或类似的返回数组类型的函数,您可以强制转换为数组

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

@工业:这对你的例子很有用!;)数组只包含数字键还是混合键?嗨!谢谢你的帮助,伙计!数组包含数字和数字characters@Industrial-更新了答案<代码>+
似乎可以很好地处理混合数组。很棒的东西!这比我想象的还要聪明!非常感谢你的帮助,克里斯!你好我担心的是文字部分。否则会发生什么?Array_combine不会以这种方式连接数组。它从两个数组构建关联数组。一个用于键,一个用于值。
$array1 = (array)$array2 + (array)$array1;