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

如何在PHP中合并多个数组,但将值混合在一起-保持它们的顺序,php,arrays,Php,Arrays,在PHP中有没有一种简单的方法可以将多个数组组合在一起,但要尊重元素的相对顺序 例如,如果我有两个数组 $x = ('1','2','3','4'); 及 我想把它们组合成一个数组 $z = ('1','a','2','b','3','c','4','d','e'); 有没有一种简单易行的方法?理想的解决方案还可以考虑不同长度的数组,就像我的示例一样 array_merge似乎没有达到我想要的效果,因为它只是将一个数组附加到另一个数组 我当前的解决方案按顺序遍历每个数组,并将值推送到我的$z

在PHP中有没有一种简单的方法可以将多个数组组合在一起,但要尊重元素的相对顺序

例如,如果我有两个数组

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

我想把它们组合成一个数组

$z = ('1','a','2','b','3','c','4','d','e');
有没有一种简单易行的方法?理想的解决方案还可以考虑不同长度的数组,就像我的示例一样

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

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


任何细节都可以从0迭代到两个数组的更长长度。
在每个步骤中,若数组$x包含索引处的项,则将其推送到最终数组$z。对数组$y执行同样的操作。

我认为这应该可以工作-

$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);
$count=max(count($x),count($y));
$newArr=array();
对于($i=0;$i<$count;$i++){
//根据键为新数组输入值
foreach(数组($x,$y)作为$arr){
if(isset($arr[$i])){
$newArr[]=$arr[$i];
}
}
}
var_dump($newArr);
您也可以试试这个

$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;      
    }
}

您可以使用此通用函数,它可以接受任意数量的数组,并将输出一个数组,其中元素首先取自第一个“列”,然后取自第二个,以此类推:

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']

询问者已经在这样做了“…我当前的解决方案按顺序遍历每个数组,并将值推送到我的$z数组”。你能指出你想要的更好的解决方案吗?他说他执行两个循环,每个数组一个。我的建议是只循环一次。这不起作用的原因有很多:在
foreach
之后没有开始括号,而是结束括号,
$newArr
声明为
数组,但在循环中用作
字符串,等等。请在发布之前测试您的代码。当然,答案是在我写评论时编辑的。。。该死!它现在可以工作了,删除了downvote。内部循环在
$i
的每次迭代中执行两次,这与我们分别为$x和$y编写检查相同。
['1', 'a', 'A', '2', 'b', 'B', '3', 'c', 'C', '4', 'd', 'e']