【问题标题】:How can I compare two arrays to fill a third? [duplicate]如何比较两个数组来填充第三个? [复制]
【发布时间】:2017-11-11 03:23:07
【问题描述】:

假设我有一个包含以下值的数组:

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

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

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

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

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

【问题讨论】:

    标签: php arrays loops merge


    【解决方案1】:
    $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)
    }
    

    【讨论】:

      【解决方案2】:

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

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

      Try it online!

      【讨论】:

        【解决方案3】:

        您可以使用 array_merge 和 array_combine,live demo

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

        【讨论】:

          【解决方案4】:

          您要查找的函数是 array_combine,其作用类似于
          array_combine($indexes, $values)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-13
            • 2017-05-12
            • 1970-01-01
            • 2021-12-19
            • 1970-01-01
            相关资源
            最近更新 更多