Php 如何比较两个数组并将键从一个数组添加到另一个数组
我有两个数组 第一阵列 第一个数组包含60个字符串,如下所示:Php 如何比较两个数组并将键从一个数组添加到另一个数组,php,arrays,Php,Arrays,我有两个数组 第一阵列 第一个数组包含60个字符串,如下所示: ['string1','string2',…,string60] 第二阵列 我有这样一个关联数组: ['Key'=>value,…'Key'=>value] 我需要做的是将第一个数组(包含60个元素)中的每个值与第二个数组中的每个键进行比较,如果第二个(关联)数组不包含与第一个数组中的任何值匹配的键,我应该将这样的元素添加到关联数组中 例如,第二个数组没有匹配string5的键,我不是说键的值,而是说key本身。所以现在我需要将st
['string1','string2',…,string60]代码>
第二阵列
我有这样一个关联数组:
['Key'=>value,…'Key'=>value]
我需要做的是将第一个数组(包含60个元素)中的每个值与第二个数组中的每个键进行比较,如果第二个(关联)数组不包含与第一个数组中的任何值匹配的键,我应该将这样的元素添加到关联数组中
例如,第二个数组没有匹配string5
的键,我不是说键的值,而是说key
本身。所以现在我需要将string5
作为一个新的key=>value元素添加到数组中,key
必须是单词string5
,而value
必须是空的
最好的方法是什么?不比以下方法复杂:
$combined = $array2 + array_fill_keys($array1, null);
array\u fill\u keys
创建一个数组,如['string1'=>null,…]
,+
添加所有这些在$array2
中不存在的键。这应该可以工作
foreach($array_1 as $val) {
if(!isset($array_2[$val])) {
$array_2[$val] = null;
}
}
可以肯定的是,有些人知道更有效的方法(从资源角度来看),因为当您拥有巨大的阵列时,这可能需要很长时间
下面是这样做的逻辑方法。
首先在键和值数组中分割第二个数组。我是说两个不同的数组
所以
现在,您必须使用从$array1到$array2的不同符号,或者反之亦然(取决于您的要求),它将为您提供缺少键的差异
$diff = array_diff($array1,$keys);
现在你可以很容易地找到它了
$combined=$array2+数组填充键($array1,null);//键值将保持不变
数组_值($array2)//索引从0开始Foreach($key为array1){if-isset($array2[$key]){…
有兴趣知道为什么这被否决。我自己测试了它,正如人们所期望的那样工作。“这不可能工作”的下意识反应:o)用两个数组测试了它,每个数组包含500.000条记录(随机键/值作为字符串).与我的解决方案相比,这种方法速度较慢(有点让我吃惊)。此解决方案大约需要0.53到0.61秒。我的解决方案大约需要0.40秒。因此,如果要循环较大或复杂的阵列,虽然我的解决方案可能更合适,但我更喜欢此解决方案的清洁度。编辑:还使用阵列翻转而不是阵列填充键进行测试。该解决方案更慢。你只是在循环ng一次,而这里的循环至少两次。然而,这里的循环是原生C循环,而你的是PHP循环。你得到一点,你会损失更多。然而,对于这样一个庞大的数组,~.55 vs.4在我看来仍然足够快,我更喜欢这句话的简洁性。
$diff = array_diff($array1,$keys);
<?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 = array_fill_keys(array_flip($arrayDiff),0);