2014-09-18 274 views
0

由值數組我如何把這個:排序基於另一個陣列

Array 
(
    [0] => stdClass Object 
     (
      [id] => 123 
      [name] => Board 
     ) 
    [1] => stdClass Object 
     (
      [id] => 133 
      [name] => Staff 
     ) 
) 

分爲:基於此

Array 
(
    [0] => stdClass Object 
     (
    [id] => 133 
      [name] => Staff    
     ) 
    [1] => stdClass Object 
     (
      [id] => 123 
      [name] => Board 
     ) 
) 

Array('Staff', 'Board' ) 

換句話說 - 爲基於數組值的對象排序...

+2

[基於另一個數組對數組進行排序?](http://stackoverflow.com/questions/348410/sort-an-array-based-on-another-array) – Jay 2014-09-18 22:54:59

+1

不要使用6年舊的答案是重複的。從那以後,PHP被重新創建了兩次,比如我使用[匿名函數](http://php.net/manual/en/functions.anonymous.php)來實現這個目前不可能的事情(沒有'創造功能「至少)。此外,該解決方案對於此問題的預期輸出無效。因此,這不是*重複的,至少是這個問題。 – 2014-09-18 22:57:24

+0

@derp這不是一個重複的問題,因爲源數據在結構上甚至沒有*遠程*看起來像標記的問題,既沒有預期的輸出,也需要完全不同的解決方案。你說的是寶馬M3和菲亞特500是相同的汽車,因爲它們都有方向盤。 – 2014-09-18 23:19:52

回答

2
$ordering = ['Staff', 'Board']; 
usort($myObjects, function($a, $b) use ($ordering) { 
    $idx1 = array_search($a->name, $ordering); 
    $idx2 = array_search($b->name, $ordering); 
    if($idx1 == $idx2) 
     return 0; 
    elseif($idx1 < $idx2) 
     return -1; 
    return 1; 
}); 

這個例子確實假設$ordering將包含它將遇到的所有名稱。如果沒有,你將不得不修補那裏的行爲(不能這樣做,因爲我不知道'你想要不匹配項目在哪裏排序')。

+0

gah - usort!我一直盯着那個php的manpage上一個多小時......來吧......腦海裏...... – Trees4theForest 2014-09-18 22:56:01

+0

哪一部分不清楚? – 2014-09-18 23:00:33

+0

您對$訂購的評論 - 那些無法匹敵的人被踢到底?無法保證我將全部獲得:P – Trees4theForest 2014-09-18 23:01:17