php – 显示来自一个数组的前4个元素和来自另一个数组的前1个元素,直到存在数组元素

我试图通过显示第一个数组中的4个第一个元素和第二个数组中的1个第一个元素来创建第三个数字数组,依此类推.

例:

A1 { 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 21, 22, 23, 24, 25 }
A2 {11, 12, 13, 14, 15, 16, 17, 18, 19, 20 } 

结果应该是:

A3 { 1, 2, 3, 4, 11, 5, 6, 7, 8, 12, 9, 10, 21, 22, 13, ... }
     └───┬────┘  ↑↑  └───┬────┘  ↑↑  └─────┬─────┘  ↑↑
         A1      A2      A1      A2        A1       A2 

现在我尝试了这段代码,但它没有显示第二个数组中的所有元素.

<?php

    $array = array(1, 2, 3, 4, 5,6,7,8,9,10);
    $array2 = array(11, 12, 13, 14, 15 ,16,17,18,19,20);

    $temp = 0;

    foreach ($array as $key => $item)
    {
        echo $item;

        if(($key+1) % 4 == '0')
        {
            echo $array2[$temp];
            $temp++;
        } 
    }


?>

最佳答案 说明

在这里,我首先将第一个数组分为4个元素的每个部分,第二个部分为1个部分,分别为array_chunk(),如下所示:

//Array one
Array (
    Array (
        //4 array elements
    )
    //...
)

//Array two
Array (
    Array (
        //1 array elements
    )
    //...
)

然后你可以使用array_map()一次遍历两个数组,并将这两个数组与array_merge()合并在一起.由于两个数组中的元素数量可能不均匀,我只需检查is_array(),如果我们仍然有一个包含要合并的元素的数组或如果我们必须为array_merge()使用一个空数组.

所以在array_map()之后我们得到一个二维数组,每个subArray包含来自第一个数组的4个元素和来自第二个数组的1个元素,如下所示:

//Array
Array (
    Array (
        //4 array elements from array one
        //1 array elements from array two
    )
    //...
)

然后我们可以使用call_user_func_array()结合array_merge()将所有元素作为一维数组.

<?php

    $array = array(1, 2, 3, 4, 5,6,7,8,9,10);
    $array2 = array(11, 12, 13, 14, 15 ,16,17,18,19,20);

    $result = call_user_func_array("array_merge", array_map(function($arrayOne, $arrayTwo){
        return array_merge(is_array($arrayOne) ? $arrayOne : [], is_array($arrayTwo) ? $arrayTwo : []);
    }, array_chunk($array, 4), array_chunk($array2, 1)));


    print_r($result);

?>

输出:

Array (
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 11
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 8
    [9] => 12
    [10] => 9
    [11] => 10
    [12] => 13
    [13] => 14
    [14] => 15
    [15] => 16
    [16] => 17
    [17] => 18
    [18] => 19
    [19] => 20
)
点赞