将多个数组与键的顺序组合在一起

时间:2015-07-24 10:37:39

标签: php arrays multidimensional-array

例如,我喜欢3个以上不同的数组,其元素如下:

第一阵列

hello-1
hi-1

第二阵列

ok-two
hi-2
22-two
hello

第三阵列

hi-3rd
hello3

等等......

我想逐个按顺序组合这个数组。例如,上面3个数组的预期输出将是:

hello-1 
ok-two
hi-3rd
hi-1
hi-2 
hello3 
22-two 
hello

我试过了array_merge()。但它在完整的第一个数组之后附加第二个数组,这不是我想要的,所以在这里我有点卡住,不知道我可以在这里使用哪些功能。任何提示或想法?

2 个答案:

答案 0 :(得分:2)

这应该适合你:

首先,我将每个数组的第一个元素放入一个子数组,然后将第二个值放入下一个子数组,依此类推,得到这个数组结构:

Array
(
    [0] => Array
        (
            [0] => hello-1
            [1] => ok-two
            [2] => hi-3rd
        )
    //...
) 

在此之后,您可以使用array_walk_recursive()循环遍历每个数组值,并将每个值都放入数组中。

<?php

    $arr1 = [
        "hello-1",
        "hi-1",
    ];

    $arr2 = [
        "ok-two",
        "hi-2",
        "22-two",
        "hello",
    ];

    $arr3 = [
        "hi-3rd",
        "hello3",
    ];

    $arr = call_user_func_array("array_map", [NULL, $arr1, $arr2, $arr3]);
    $result = [];
    array_walk_recursive($arr, function($v)use(&$result){
        if(!is_null($v))
            $result[] = $v;
    });

    print_r($result);


?>

输出:

Array
(
    [0] => hello-1
    [1] => ok-two
    [2] => hi-3rd
    [3] => hi-1
    [4] => hi-2
    [5] => hello3
    [6] => 22-two
    [7] => hello
)

答案 1 :(得分:0)

我有另一种解决此问题的方法

<?php
$arr1 = array(
        "hello-1",
        "hi-1");

$arr2 = array("ok-two",
              "hi-2",
              "22-two",
              "hello");

$arr3 = array(
    "hi-3rd",
    "hello3");

$max = count($arr1);
$max = count($arr2) > $max ? count($arr2) : $max;
$max = count($arr3) > $max ? count($arr3) : $max;

$result = array();
for ($i = 0; $i < $max; $i++) {
    if (isset($arr1[$i])) {
        $result[] = $arr1[$i];
    }

    if (isset($arr2[$i])) {
        $result[] = $arr2[$i];
    }

    if (isset($arr3[$i])) {
        $result[] = $arr3[$i];
    }
}

print_r($result);