【问题标题】:Add one array to a multidimensional array将一个数组添加到多维数组
【发布时间】:2017-12-22 04:22:15
【问题描述】:

我想将数组 b 的值添加到数组 a:

$a = [[1, 2],[4, 5],[7, 8]];
$b = [3, 6, 9];

结果应该是:

$result = [[1, 2, 3],[4, 5, 6],[7, 8, 9]];

我正在尝试这个(以及很多其他的东西),但不明白。

foreach ($a as $el) {
    $i = 0; 
    $el[] = $b[$i];
    $i++;
}

【问题讨论】:

    标签: php multidimensional-array array-merge indexed


    【解决方案1】:

    这是其他人没有想到的巧妙的单线:

    代码:(Demo)

    $a = [[1, 2],[4, 5],[7, 8]];          
    $b = [3, 6, 9];
    
    var_export(array_map('array_merge',$a,array_chunk($b,1)));
    

    输出:

    array (
      0 => 
      array (
        0 => 1,
        1 => 2,
        2 => 3,
      ),
      1 => 
      array (
        0 => 4,
        1 => 5,
        2 => 6,
      ),
      2 => 
      array (
        0 => 7,
        1 => 8,
        2 => 9,
      ),
    )
    

    这种方法将$b 拆分为与$a 相同的结构,然后将它们合并在一起很简单。

    如果您的输入数组相对较小,foreach() 可能是最佳选择。随着您的输入数组的大小增加,我相信您会发现我的方法将比foreach() 具有更高的性能优势(尽管老实说,我是基于我提供的其他类似答案而实际上并没有进行基准测试本例)。

    【讨论】:

      【解决方案2】:

      这里我们使用array_walk 来实现所需的输出。希望这会有所帮助。

      Try this code snippet here

      <?php
      ini_set('display_errors', 1);
      $a = [[1, 2],[4, 5],[7, 8]];
      $b = [3, 6, 9];
      
      array_walk($a,function(&$value,$key) use($b){
          array_push($value, $b[$key]);
      });
      print_r($a);
      

      【讨论】:

      • 你的解决方案应该比我的更快。
      • 我不确定为什么这比for loop 解决方案更受欢迎。这要复杂得多——即使使用引用。我猜是因为它看起来更花哨?
      • @Xatenev 看到我提供了一种替代方法来实现所需的输出,就是这样。我本人赞成 for-loop 方法。
      • @Xatenev 这不是比我更快的解决方案吗? array_walk 应该工作得更快。当然,如果一个数组只有这个那么小,则没有区别。第二个赞来自我。
      • @SahilGulati 当然,我也赞成您的回答-我只是感到困惑,因为在这种情况下,for loop 绝对是更好的解决方案,因为它更具可读性,我绝对会推荐给 OP
      【解决方案3】:

      这应该很简单:

      $a = [[1, 2],[4, 5],[7, 8]];          
      $b = [3, 6, 9];
      foreach($a as $key => &$arr){
          $arr[] = $b[$key];
      }
      

      【讨论】:

        【解决方案4】:
        $a = [[1, 2],[4, 5],[7, 8]];
        $b = [3, 6, 9];
        $result = $a;
        foreach ($a as $key => $val) {
            if(!empty($b[$key])) {
                array_push($result[$key], $b[$key]);
            }
        }
        
        var_export($result);
        

        【讨论】:

          【解决方案5】:

          这并不难。

          <?php
          $a = [[1, 2],[4, 5],[7, 8]];
          $b = [3, 6, 9];
          for($i = 0; $i < count($b);$i++) {
              array_push($a[$i],$b[$i]);
          }
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-07-23
            • 1970-01-01
            • 1970-01-01
            • 2021-12-29
            • 1970-01-01
            • 2016-03-18
            • 1970-01-01
            • 2014-08-25
            相关资源
            最近更新 更多