2013-05-22 42 views
3

我需要将3个数组合并到1中,同时按照第二个数组的第一个条目跟在第一个数组的第一个条目之后的方式排序新数组。PHP:如何在重新排列数组的同时在1个数组中排序3个数组

例子:

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

这些阵列应该产生以下数组中:

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

非常感谢您的答复!

回答

8

所有你需要的是:

$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

或简单的一个在线解决方案 - @deceze

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

One Line DEMO

+1

非常光滑和简易:) – MackieeE

+5

'call_user_func_array( 'array_merge',array_map(NULL,$阵列1,$数组2 ,$ array3))':-3 – deceze

+1

非常优雅!如果不是你的答案,双循环会做到这一点。 – Aralicia

2

试试这个:

$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); 

编辑:按照deceze评论:

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

call_user_func_array被删除。

输出:

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

内部'call_user_func_array'是多余的。 – deceze

+0

@deceze:那只是转置阵列 –

+0

??可以很容易地写成'array_map(null,$ array1,$ array2,$ array3)'来达到同样的效果。 – deceze

1

只是其中一个在线解决方案:

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