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


How to merge multiple arrays in PHP but mix values together - retaining their order

在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数组。这不仅不美观,而且还要求输入数组具有相同数量的值,这对我的应用程序来说并不理想。

我想这应该能行-

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

您可以使用这个泛型函数,它可以接受任意数量的数组,并将首先从第一个"列"中取出元素,然后从第二个"列"中取出元素,等等:

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

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

你也可以试试这个

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