PHP:如何将两个数组合并,其中第一个数组的值位于偶数位置,第二个数组的值位于奇数位置?

3

当数组1的值在偶数位,数组2的值在奇数位时,如何合并两个数组?

示例:

$arr1=array(11, 34,30);
$arr2=array(12, 666);
$output=array(11, 12, 34, 666,30);

1
如果$arr1和$arr2中的元素数量不同,应该发生什么? - Mark Baker
4个回答

5
无论两个数组的长度或者它们的键(不会对它们进行索引),以下代码都能正确运行:
$result = array();
while(!empty($arr1) || !empty($arr2)) {
    if(!empty($arr1)) {
        $result[] = array_shift($arr1);
    }
    if(!empty($arr2)) {
        $result[] = array_shift($arr2);
    }
}

编辑:我的原始答案有一个错误;已经修复。


这个解决方案非常完美,不仅可以合并两个数组,而且可以使用第n个数组将所有数组按顺序逐个合并成一个键合并。 - Harsh Patel

3

试一下这个

$arr1=array(11,34,30,35);
$arr2=array(12,666,23);

$odd= array_combine(range(0,2*count($arr1)-1,2), $arr1);
$even = array_combine(range(1,2*count($arr2)-1,2), $arr2);
$output=$odd+$even;
ksort($output);
echo "<pre>";
print_r($output);

返回值

Array
(
    [0] => 11
    [1] => 12
    [2] => 34
    [3] => 666
    [4] => 30
    [5] => 23
    [6] => 35
)

2
假设$arr1和$arr2是大小相等的简单枚举数组,或者$arr2比$arr1少一个元素。
$arr1 = array(11, 34); 
$arr2 = array(12, 666);
$output = array();
foreach($arr1 as $key => $value) {
    $output[] = $value;
    if (isset($arr2[$key])) {
        $output[] = $arr2[$key];
    }
}

1
如果第二个数组更长,或者数组没有按数字索引,则此方法将无法正常工作。 - Jon
@Jon - 我认为我的回答的第一行实际上已经说了这个...关于“假设$arr1和$arr2是相等大小的简单枚举数组,或者$arr2比$arr1少一个元素”的那一部分。 - Mark Baker

1

遍历具有更多项的数组,使用循环索引访问两个数组并按要求将它们合并为结果数组...

$longer = (count($arr1) > count($arr2) ? $arr1 : $arr2);
$result = array();
for ($i = 0; $i < count($longer); $i++) {
   $result[] = $arr1[i];
   if ($arr2[i]) {
      $result[] = $arr2[i];
   } else {
      $result[] = 0; // no item in arr2 for given index
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接