【问题标题】:PHP merge and rearrange 2 or more arraysPHP合并和重新排列2个或更多数组
【发布时间】:2017-03-29 06:59:31
【问题描述】:

它将有 2 个或更多的数组从 foreach 循环中出来。喜欢关注

array1 
    [0] => Array
        (
            [0] => 1207
            [1] => 4
            [2] => haha.mp4
        )

    [1] => Array
        (
            [0] => 1208
            [1] => 4
            [2] => hehe.mp4
        )

array2
   [0] => Array
        (
            [0] => 1209
            [1] => 16
            [2] => SampleVideo.mp4
        )

    [1] => Array
        (
            [0] => 1210
            [1] => 16
            [2] => 295.mp4
        )

我想从这两个数组中获取相同的索引值,然后像这样合并这些数组。

**FinalArray = array1[0],array2[0],array1[1],array2[1]** 

例如

FinalArray

    [0] => Array
        (
            [0] => 1207
            [1] => 4
            [2] => haha.mp4
        )
    [1] => Array
        (
            [0] => 1209
            [1] => 16
            [2] => SampleVideo.mp4
        )

    [2] => Array
        (
            [0] => 1208
            [1] => 4
            [2] => hehe.mp4
        )


    [3] => Array
        (
            [0] => 1210
            [1] => 16
            [2] => 295.mp4
        )

请帮助如何获取相同的索引值并合并这 2 个数组。谢谢

【问题讨论】:

  • 放你的foreach循环?

标签: php arrays multidimensional-array array-merge


【解决方案1】:

您可以通过使用array_columnarray_merge 的一个循环来实现这一点,如下所示,

$array1 = array(
    0 => [0 => 1207, 1 => 4, 2 => "haha.mp4"],
    1 => [0 => 1208, 1 => 4, 2 => "hehe.mp4"],
);

$array2 = array(
    0 => [0 => 1209, 1 => 16, 2 => "SampleVideo.mp4"],
    1 => [0 => 1210, 1 => 16, 2 => "295.mp4"],
);

// here I assume that the following array is the output of your foreach loop
$array = [$array1, $array2];
$list = [];
foreach ($array as $key => $value) {
    $list = array_merge($list, array_column($array, $key));
}

print_r($list);

现场演示:https://3v4l.org/2chf5

【讨论】:

    【解决方案2】:

    桑迪,我是来把你从废话中解救出来的。此页面上的所有方法都使用了太多的循环或太多的函数。最佳做法如下所示:

    代码:(Demo)

    $array1 = array(
        0 => [0 => 1207, 1 => 4, 2 => "haha.mp4"],
        1 => [0 => 1208, 1 => 4, 2 => "hehe.mp4"],
    );
    
    $array2 = array(
        0 => [0 => 1209, 1 => 16, 2 => "SampleVideo.mp4"],
        1 => [0 => 1210, 1 => 16, 2 => "295.mp4"],
    );
    
    foreach($array1 as $k=>$v){
        $result[]=$v;
        // if $array2 always has a matching key:
        $result[]=$array2[$k];
        // if it is possible that $array2 doesn't have a matching key:
        // if(isset($array2[$k]){$result[]=$array2[$k];}
        //... if you have more arrays to include, just repeat like: $result[]=$array3[$k];
    }
    var_export($result);
    

    输出:

    array (
      0 => 
      array (
        0 => 1207,
        1 => 4,
        2 => 'haha.mp4',
      ),
      1 => 
      array (
        0 => 1209,
        1 => 16,
        2 => 'SampleVideo.mp4',
      ),
      2 => 
      array (
        0 => 1208,
        1 => 4,
        2 => 'hehe.mp4',
      ),
      3 => 
      array (
        0 => 1210,
        1 => 16,
        2 => '295.mp4',
      ),
    )
    

    【讨论】:

      【解决方案3】:
      $result = array_merge($array1, $array2);
      print_r($result);
      

      来自: http://php.net/manual/en/function.array-merge.php

      【讨论】:

      • 感谢您的回答。我不想简单地合并这些数组。我想合并相同的索引值,如下所示。 FinalArray = array1[0],array2[0],array1[1],array2[1]
      • 那么我猜你将不得不使用 foreach($key => $value) 遍历它们并手动排列它们
      • 是的,我知道我的循环。但需要动态 foreach ($out as $key => $value) { if($key == 0) { $room0 = array_merge($room0,$value); } if($key == 1) { $room1 = array_merge($room1,$value); } }
      【解决方案4】:

      要获得元素顺序为array0[0],array1[0],array0[1],array1[1] 的finalArray,首先计算$max_elements,然后执行嵌套循环,检查该数组中是否存在$i 的元素:

      $arrays = [$array0, $array1];
      $max_elements = 0;
      foreach($arrays as $array){
          $max_elements = max($max_elements, count($array));
      }
      $merged = []
      for($i = 0; $i < $max_elements; $i++){
          foreach($arrays as $array){
              if($array[$i]){
                  $merged[] = $array[$i];
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多