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

时间:2015-10-19 13:16:34

标签: php arrays

我有两个数组

  

第一阵列

第一个数组包含60个这样的字符串:

['string1','string2', ... , string60];

  

第二阵列

我有一个像这样的关联数组:

['Key' => value, ..., 'Key' => value]

我需要做的是比较第一个数组(包含60个元素)的每个值,第二个数组中的每个 ,如果是第二个(关联) array不包含与第一个数组中的任何值匹配的键 - 我应该将这样的ellement添加到关联数组中。

例如,第二个数组没有匹配string5的键,我不是在谈论键的值,我实际上是在谈论Key本身。所以现在我需要添加string5作为新密钥=>值ellement到数组,Key必须是单词string5value必须为空。

最好的方法是什么?

5 个答案:

答案 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);

现在您可以轻松找到它。

Please refer to array_diff Source: php.net

答案 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);