【问题标题】:PHP merging 3 arraysPHP合并3个数组
【发布时间】:2013-08-28 06:25:01
【问题描述】:

我有 3 个数组:

array(1, 5, 1);
array(3, 2, 7, 5 ,4);
array(4, 3, 6, 5)

我想合并它们并得到这样的结果:

array(
    array(1, 3, 4),
    array(5, 2, 3),
    array(1, 7, 6),
    array(5, 5),
    array(4)
);

最简单的方法是什么?

【问题讨论】:

标签: php


【解决方案1】:
$arrs = array(
  array(1, 5, 1),
  array(3, 2, 7, 5, 4),
  array(4, 3, 6, 5),
);

$result = array();
$num_arrs = count($arrs);
for($i = 0; $i < $num_arrs; $i++){
  $size = count($arrs[$i]);
  for($j = 0; $j < $size; $j++){
    if(!isset($result[$j]))
      $result[$j] = array();
    $result[$j][] = $arrs[$i][$j];
  }
}

Demo

【讨论】:

  • .push() 在 PHP 中?这是什么?
  • @VahidHallaji 将语言与 Javascript 混合在一起。从那时起我一直在编辑
  • 很好的解决方案,谢谢,但@Kolink 解决方案有点简单。
【解决方案2】:

假设你有最新版本的 PHP (5.5),你可以使用这个:

$input = array(
    array(1,5,1),
    array(3,2,7,5,4),
    array(4,3,6,5)
);
$output = array_column($input,null);

如果您没有最新版本,请参阅 the original PHP version 以获取 shim。

或者,对于这种特定情况(即专门的垫片),试试这个:

$input = array(...); // see code block above
$output = array();
foreach($input as $arr) foreach($arr as $i=>$v) $output[$i][] = $v;

【讨论】:

  • 不错!直接我想要的!
【解决方案3】:
$arrays = array(
  array(1, 5, 1),
  array(3, 2, 7, 5 ,4),
  array(4, 3, 6, 5)
);
$combined = array();
foreach($arrays as $array) {
  foreach($array as $index => $val) {
     if(!isset($combined[$index])) $combined[$index] = array();
     $combined[$index][] = $val;
} }

在那之后$combined 持有你想要的东西。

【讨论】:

  • 很好的解决方案,谢谢,但@Kolink 解决方案有点简单。
【解决方案4】:

这是你想要的吗?
你可以使用array_map

<?php
  $a  = array( 1, 5, 1 );
  $b  = array( 3, 2, 7, 5 ,4 );
  $c  = array( 4, 3, 6, 5 );

  $d  = array_map( function() {
    return array_filter( func_get_args() );
  }, $a, $b, $c );

  print_r( $d );
?>

输出

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 4
        )

    [1] => Array
        (
            [0] => 5
            [1] => 2
            [2] => 3
        )

    [2] => Array
        (
            [0] => 1
            [1] => 7
            [2] => 6
        )

    [3] => Array
        (
            [1] => 5
            [2] => 5
        )

    [4] => Array
        (
            [1] => 4
        )

)

【讨论】:

  • 很好的解决方案,谢谢,但@Kolink 解决方案有点简单。
猜你喜欢
  • 2017-12-23
  • 2020-04-28
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多