3

I need to merge 3 arrays into 1, while ordering the new array in a way that the first entry of the second array follows the first entry of the first array.

Example:

$array1 = array(dog, cat, mouse);
$array2 = array(table, chair, couch);
$array3 = array(car, bike, bus);

These arrays should result in the following array:

$resultarray = array(dog, table, car, cat, chair, bike, mouse, couch, bus);

Many thanks for your responses!

mickmackusa
  • 43,625
  • 12
  • 83
  • 136

3 Answers3

8

All you need is :

$resultarray = array();
foreach(array_map(null, $array1, $array2, $array3) as $set) {
    $resultarray = array_merge($resultarray, $set);
}
print_r($resultarray);

Output

Array
(
    [0] => dog
    [1] => table
    [2] => car
    [3] => cat
    [4] => chair
    [5] => bike
    [6] => mouse
    [7] => couch
    [8] => bus
)

See Live DEMO

Or Simple one line solution - @deceze

call_user_func_array('array_merge', array_map(null, $array1, $array2, $array3));

One Line DEMO

Community
  • 1
  • 1
Baba
  • 94,024
  • 28
  • 166
  • 217
  • 5
    `call_user_func_array('array_merge', array_map(null, $array1, $array2, $array3))` :-3 – deceze May 22 '13 at 09:28
  • 1
    Very elegant ! A double loop would have done it if not for your answer. – Aralicia May 22 '13 at 09:28
  • Thanks for your quick reply. Can I also use your solution when I'm using a multidimensional array: $array = array(array(dog, cat, mouse),array(table, chair, couch),array(car, bike, bus)); – Teus Louwerens May 22 '13 at 09:47
  • That a different case depends on you desired output and existing multidimensional array structure – Baba May 22 '13 at 09:49
  • @TeusLouwerens You only need to "spread" the multidimensional array with `...` (splat operator). `array_merge(...array_map(null, ...$multi))` – mickmackusa Sep 02 '22 at 20:36
2

try this :

$array1 = array('dog', 'cat', 'mouse');
$array2 = array('table', 'chair', 'couch');
$array3 = array('car', 'bike', 'bus');

$result = call_user_func_array('array_merge', call_user_func_array('array_map', array(null,$array1,$array2,$array3)));

echo "<pre>";
print_r($result);

EDIT : As per deceze comment :

$result = call_user_func_array('array_merge', array_map(null,$array1,$array2,$array3));

Inner call_user_func_array is removed.

Output :

Array
(
    [0] => dog
    [1] => table
    [2] => car
    [3] => cat
    [4] => chair
    [5] => bike
    [6] => mouse
    [7] => couch
    [8] => bus
)
Prasanth Bendra
  • 31,145
  • 9
  • 53
  • 73
1

Just another one line solution:

$result = array_reduce(array_map(null, $array1, $array2, $array3), 'array_merge', array());
xdazz
  • 158,678
  • 38
  • 247
  • 274