2017-02-10 131 views
0

我有這種陣列的選擇,以及內部陣列的一些值的陣列(尋找一個特定的值)爲「ID」排序基於另一陣列

[options] => Array (
    [0] => Array (
     [id] => 1088 
     [label] => John 
    ) 
    [1] => Array (
     [id] => 1089 
     [label] => Peter 
    ) 
    [2] => Array (
     [id] => 1050 
     [label] => Mary 
    ) 
    .... 

在另一方面,我有這樣的數組:

$array_sort = array(1089, 1050, 1088, ...); 

我想第一個數組的數組的選項進行排序(看的「ID」)的基礎上$array_sort。我知道如何以非常骯髒的方式(有很多循環和臨時數組),但我想有一些聰明的array_ *函數解決方案來做到這一點。

謝謝!

+0

謝謝你的版,@Qirel – FlamingMoe

回答

1

你可以排序數組中使用array_filter限制的選項,只有那些,然後usort使用array_search基於他們對$array_sort數組中的位置對它們進行排序:

$sorted = array_filter($options, function($arr) use($array_sort) { 
    return in_array($arr['id'], $array_sort); 
}); 
usort($sorted, function($a, $b) use($array_sort) { 
    return array_search($a['id'], $array_sort) - array_search($b['id'], $array_sort); 
}); 
// $sorted should now be the sorted array 
+0

$排序後的回報只是1 :-( – FlamingMoe

+0

對不起,它對數組進行排序,我將編輯代碼 –

+0

我無法編輯,但是您錯過了「use($ array_sort)」這兩個函數爲了獲得array_sort的正確範圍,因爲它在函數之外;-)和它工作!謝謝 – FlamingMoe