如何比较两个数组以填充第三个?

时间:2017-06-09 07:48:08

标签: php arrays loops merge

想象一下,我有一个包含以下值的数组:

$indexes = [ 'Hello' , 'Hoi', 'Ola' , 'Shalom' , 'Salaam'];

此外,我还有一个不完整的数组:

$values = ['Hello' => 2, 'Ola' => 20 ];

如何合并这些数组以获得显示所有索引及其值的结果,如果没有找到值,则为0?

$desiredResult = [
 'Hello' => 2, 
 'Hoi' => 0, 
 'Ola' => 20 ,
 'Shalom' => 0,
 'Salaam' => 0
]

4 个答案:

答案 0 :(得分:4)

$indexes = [ 'Hello' , 'Hoi', 'Ola' , 'Shalom' , 'Salaam'];
$values = ['Hello' => 2, 'Ola' => 20 ];

$default = array_combine($indexes, array_fill(0, count($indexes), 0));

$result = array_replace($default, $values);

var_dump($result);

结果将是:

array(5) {
  ["Hello"]=>
  int(2)
  ["Hoi"]=>
  int(0)
  ["Ola"]=>
  int(20)
  ["Shalom"]=>
  int(0)
  ["Salaam"]=>
  int(0)
}

答案 1 :(得分:3)

您可以使用内置函数(请参阅其他答案),但您当然也可以自行循环。

function addKeys(&$arr, $keys, $value = 0) {
  foreach ($keys as $key) {
    if (!array_key_exists($key, $arr)) {
      $arr[$key] = $value;
    }
  }
  return $arr;
}

Try it online!

答案 2 :(得分:2)

您可以使用array_merge和array_combine,live demo

$disiredResult = array_merge(
   array_combine($indexes, array_fill(0, count($indexes), 0)), $values
);

答案 3 :(得分:0)

您正在寻找的功能是array_combine,其作用类似于array_combine($indexes, $values)