0

I need to merge two arrays with different depths, but with the same count. How can I distribute all of the rows from my first array to be the first row in each group of my second array?

$array1 = [
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3]
];

$array2 = [
    [
        [4, 5, 6, 7, 8],
        [9, 10, 11, 12, 13],
        [14, 15, 16]
    ],
    [
        [4, 5, 6, 7, 8],
        [9, 10, 11, 12, 13],
        [14, 15, 16]
    ],
    [
        [4, 5, 6, 7, 8],
        [9, 10, 11, 12, 13],
        [14, 15, 16]
    ]
];

Desired result:

[
    [
        [1, 2, 3],
        [4, 5, 6, 7, 8],
        [9, 10, 11, 12, 13],
        [14, 15, 16]
    ],
    [
        [1, 2, 3],
        [4, 5, 6, 7, 8],
        [9, 10, 11, 12, 13],
        [14, 15, 16]
    ],
    [
        [1, 2, 3],
        [4, 5, 6, 7, 8],
        [9, 10, 11, 12, 13],
        [14, 15, 16]
    ]
]
mickmackusa
  • 43,625
  • 12
  • 83
  • 136
Cananau Cristian
  • 436
  • 2
  • 6
  • 30

1 Answers1

2

You can use array_map to loop thru your array and use array_merge to merge the 2 arrays.

$arary1 = ...

$array2 = ...

$newarray = array_map(function ($a, $b) {
    return array_merge(array($a),$b);
}, $arary1, $array2 );

echo "<pre>";
print_r( $newarray );
echo "</pre>";

This will result to:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

            [1] => Array
                (
                    [0] => 4
                    [1] => 5
                    [2] => 6
                    [3] => 7
                    [4] => 8
                )

            [2] => Array
                (
                    [0] => 9
                    [1] => 10
                    [2] => 11
                    [3] => 12
                    [4] => 13
                )

            [3] => Array
                (
                    [0] => 14
                    [1] => 15
                    [2] => 16
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

            [1] => Array
                (
                    [0] => 4
                    [1] => 5
                    [2] => 6
                    [3] => 7
                    [4] => 8
                )

            [2] => Array
                (
                    [0] => 9
                    [1] => 10
                    [2] => 11
                    [3] => 12
                    [4] => 13
                )

            [3] => Array
                (
                    [0] => 14
                    [1] => 15
                    [2] => 16
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

            [1] => Array
                (
                    [0] => 4
                    [1] => 5
                    [2] => 6
                    [3] => 7
                    [4] => 8
                )

            [2] => Array
                (
                    [0] => 9
                    [1] => 10
                    [2] => 11
                    [3] => 12
                    [4] => 13
                )

            [3] => Array
                (
                    [0] => 14
                    [1] => 15
                    [2] => 16
                )

        )

)

Or using foreach loop

$newarray = array();
foreach( $arary1 as $key => $val ) {
    $newarray[] = array_merge(array($val),$array2[$key]);
} 

Doc: array_map, array_merge

Eddie
  • 26,593
  • 6
  • 36
  • 58