如何在PHP中合并多个数组但将值混合在一起 - 保留它们的顺序

时间:2016-11-08 12:51:36

标签: php arrays

在PHP中是否有一种直接的方法将多个数组组合在一起但尊重元素的相对顺序?

例如,如果我有两个数组

$x = ('1','2','3','4');

$y = array('a','b','c','d','e');

我希望将它们组合成一个数组

$z = ('1','a','2','b','3','c','4','d','e');

有这么简单的方法吗?理想的解决方案也可以解释不同长度的数组,就像我的例子一样。

array_merge似乎没有达到我想要的效果,因为它只是将一个数组附加到另​​一个数组。

我当前的解决方案按顺序遍历每个数组并将值推送到我的$ z数组。这不仅不优雅,还要求输入数组具有相同数量的值,这对我的应用程序来说并不理想。

任何见解都将受到赞赏

4 个答案:

答案 0 :(得分:2)

我认为这应该有效 -

$count = max(count($x), count($y));

$newArr = array();
for ($i = 0; $i < $count; $i++) {
  // enter values to the new array based on key
  foreach(array($x, $y) as $arr) {
    if (isset($arr[$i])) {
      $newArr[] = $arr[$i];
    }
  }
}

var_dump($newArr);

答案 1 :(得分:1)

从0到两个数组的较大长度迭代。 在每一步,如果数组$ x包含索引项,则将其推送到最终数组$ z。对数组$ y执行相同的操作。

答案 2 :(得分:1)

你可以使用这个泛型函数,它可以接受任意数量的数组,并输出一个数组,其中的元素来自第一个&#34;列&#34;首先,然后从第二个,等等:

function mix_merge(...$args) {
    return call_user_func_array('array_merge', 
        array_map(function($i) use ($args) { return array_column($args, $i); },
                  range(0, max(array_map('count', $args))-1)));
}


// Sample data:
$x = array('1','2','3','4');
$y = array('a','b','c','d','e');    
$z = array('A','B','C');    

$res = mix_merge($x, $y, $z);

结果数组将是:

['1', 'a', 'A', '2', 'b', 'B', '3', 'c', 'C', '4', 'd', 'e']

答案 3 :(得分:0)

你也可以尝试这个

$x = array('1','2','3','4');
$y = array('a','b','c','d','e');
foreach($y as $key=>$value){
    if($x[$key]){
     $z[] = $x[$key];
     $z[] =     $value;

    }else {
        $z[] = $value;      
    }
}