我正在尝试从两个当前数组创建一个新数组。试过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];
}
那么,实现相同结果的最快(性能)方法是什么?
答案 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_merge和array_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值,直到两个数组的大小相等为止。