2013-05-22 69 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());