Php 如何比较两个数组并将键从一个数组添加到另一个数组

Php 如何比较两个数组并将键从一个数组添加到另一个数组,php,arrays,Php,Arrays,我有两个数组 第一阵列 第一个数组包含60个字符串,如下所示: ['string1','string2',…,string60] 第二阵列 我有这样一个关联数组: ['Key'=>value,…'Key'=>value] 我需要做的是将第一个数组(包含60个元素)中的每个值与第二个数组中的每个键进行比较,如果第二个(关联)数组不包含与第一个数组中的任何值匹配的键,我应该将这样的元素添加到关联数组中 例如,第二个数组没有匹配string5的键,我不是说键的值,而是说key本身。所以现在我需要将st

我有两个数组

第一阵列

第一个数组包含60个字符串,如下所示:

['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);