2012-05-22 263 views
0

我遇到麻煩根據另一個數組排序數組。我嘗試過usort,uksort和uasort,但我無處可去。其他關於stackoverflow的問題在這裏並不直接適用,因爲我的數組結構不同。我想這個多維數組排序:如何根據輸入數組對數組進行排序?

$main = Array (
    [Technology] => Array() 
    [World] => Array() 
    [Europe] => Array() 
) 

通過使用該索引數組:

$index = Array (
    [0] => Europe 
    [1] => Technology 
    [2] => World 
) 

基本上,在這個例子中,我想歐洲首屈一指的$主陣列中,技術第二和世界第三,因爲這是他們在$ index數組中的位置。我怎麼做? (請在上面的陣列忽略小的語法錯誤)

+0

你試過'ksort'快得多? – flowfree

+0

你可以在這裏使用array_multisort嗎?它通常用於對多維數組進行排序。但在這裏,你仍然需要對你的數組做一些初始化處理。http://php.net/manual/en/function.array-multisort.php – verisimilitude

回答

1
$main_sort = array()  
foreach ($index as $key => $value) { 
    if ($main [$value]) $main_sorted [$value] = $main [$value]; 
} 

只需通過$index陣列環和那些值映射到使用從$main數組中的值的新數組。

+0

它的工作原理。謝謝 –

+0

如果$ index包含的值不是$ main的鍵值,則在$ main_sorted中可能出現空值,並且可能在您的日誌中出現警告 –

+0

通過添加簡單的if語句 – Jeroen

0

鑑於$index$main

uksort($main, function ($k, $k2) use ($index) { 
    return array_search($k, $index) - array_search($k2, $index); 
}); 

陣列將根據$index指定的鍵進行排序。沒有指定不匹配鍵的行爲。

$sorted = array_merge(array_flip($index), $main); 

如果$指數的值是:

0

此解決方案,如果你沒有這不是在$主要的關鍵在$索引中的任何值(是你的榜樣的情況下)的作品的$主鍵的超集,一個可能的解決方案是:

$sorted = array_intersect_assoc(array_merge(array_flip($index), $main), $main); 

請記住,讓PHP函數對數組的工作,比這樣做「明確」

相關問題