2013-03-08 91 views
0

存在這些密鑰我有這樣的陣列PHP排序鍵關聯數組,在其它陣列

$myArray=array(

'a'=>array('id'=>1,'text'=>'blabla1'), 
'b'=>array('id'=>2,'text'=>'blabla2'), 
'c'=>array('id'=>3,'text'=>'blabla3'), 
'd'=>array('id'=>4,'text'=>'blabla4'), 

); 

,我想通過誰在另一個存在的密鑰A,B,C,d,上述數組進行排序數組:

$tempArray=array('c','a','d','b'); 

我如何能做到這一點,以使$ myArray的

看起來是這樣的:

$myArray=array(

'c'=>array('id'=>3,'text'=>'blabla3'), 
'a'=>array('id'=>1,'text'=>'blabla1'), 
'd'=>array('id'=>4,'text'=>'blabla4'), 
'b'=>array('id'=>2,'text'=>'blabla2'), 

); 

感謝您的幫助!

+0

你試過'array_shift()'嗎? – Kermit 2013-03-08 15:19:45

+3

http://php.net/manual/en/function.uksort.php – mkaatman 2013-03-08 15:20:14

+0

我不知道如何array_shift可以幫助,但uksort我認爲可以 – gadlol 2013-03-08 15:24:16

回答

3

最簡單和可能最有效的方式來做到這一點是通過迭代保存排序順序排列,並創建一個新的,有序數組:

$sorted = array(); 

foreach ($tempArray as $order) { 
    if (isset($myArray[$order])) { 
    $sorted[$order] = $myArray[$order]; 
    } 
} 

print_r($sorted); 

這工作,因爲關聯數組隱含具有的順序元素添加到數組的順序。

See it working


EDIT

任何涉及一個排序函數溶液可能會比該效率低得多。這是因爲要做到這一點,你需要使用一個回調函數 - 這已經隱含了函數調用的開銷。

排序功能也可以通過比較項目來工作,這意味着這些解決方案的複雜性將比這個解決方案的複雜性更大(其複雜性僅僅是O(n))。另外,爲了得到排序函數的返回值,您需要檢查目標數組,找到每個比較的每個鍵的位置,從而增加更多的複雜性。

+0

我已經這樣做!但我想用一個PHP排序fucntion! – gadlol 2013-03-08 15:23:05

+0

@jBaron http://php.net/usort - 用戶自定義的排序 – 2013-03-08 15:23:33

+0

@MikeB uksort是他需要的 – mkaatman 2013-03-08 15:24:21