我有两个数组
第一阵列
第一个数组包含60个这样的字符串:
['string1','string2', ... , string60];
第二阵列
我有一个像这样的关联数组:
['Key' => value, ..., 'Key' => value]
我需要做的是比较第一个数组(包含60个元素)的每个值,第二个数组中的每个 键 ,如果是第二个(关联) array不包含与第一个数组中的任何值匹配的键 - 我应该将这样的ellement添加到关联数组中。
例如,第二个数组没有匹配string5
的键,我不是在谈论键的值,我实际上是在谈论Key
本身。所以现在我需要添加string5
作为新密钥=>值ellement到数组,Key
必须是单词string5
,value
必须为空。
最好的方法是什么?
答案 0 :(得分:2)
并不比以下更复杂:
$combined = $array2 + array_fill_keys($array1, null);
array_fill_keys
创建了一个类似['string1' => null, ..]
的数组,+
添加了$array2
中尚未存在的所有键。
答案 1 :(得分:1)
$ combined = $ array2 + array_fill_keys($ array1,null); //将维护键值
array_values($数组2); //索引从0开始
答案 2 :(得分:0)
这应该有效
foreach($array_1 as $val) {
if(!isset($array_2[$val])) {
$array_2[$val] = null;
}
}
非常确定有人知道更有效的方法(资源方面),因为这可能需要很长时间才能拥有庞大的数组。
答案 3 :(得分:0)
这是执行此操作的合理方式。 首先在key和values数组中划分第二个数组。我的意思是两个不同的阵列。
所以
$keys = array_keys($array2);
$values = array_values($array2);
现在你必须采取不同的$ array1到$ array2 sigular,反之亦然(取决于你的要求),它会给你不同的密钥。
$diff = array_diff($array1,$keys);
现在您可以轻松找到它。
答案 4 :(得分:0)
<?php
$required = array('key1', 'key2', 'key3','key4');
$data = array(
'key1' => 10,
'key2' => 20
);
$arrayDiff = array_diff_key(array_flip($required),$data);
$final = array_merge($data,$arrayDiff);
// Result
// Array
//(
// [key1] => 10
// [key2] => 20
// [key3] => 2
// [key4] => 3
//)
?>
如果要将默认值填充到添加到数组的新键,请在合并之前添加以下行,并在合并语句中使用变量$ arrayFill而不是$ arrayDiff
$arrayFill = array_fill_keys(array_flip($arrayDiff),0);