2016-07-27 111 views
0

我有一個StdClass數組。每個對象是有序像這樣(有數組中大約50個對象,但我想我只是把一個顯示結構):使用另一個數組的值對StdClass對象數組排序

stdClass Object (
    [display_name] => Bob Simons 
    [post_title] => Lesson 1 
    [meta_value] => 100 
    [comment_approved] => passed 
    [c_num2] => 26 
    [term_id] => 3 
) 

我有另一個數組,看起來像這樣:

Array ( 
    [0] => 3 
    [1] => 4 
    [2] => 5 
    [3] => 16 
    [4] => 17 
    [5] => 18 
    [6] => 19 
    [7] => 20 
    [8] => 21 
) 

第二個數組基於[term_id]字段定義第一個數組的排序。所以基本上,[term_id] 3的所有內容都應該位於數組的頂部,所有[term_id] 4都應該是下一個,全部基於第二個數組。

我正在拼命想弄清楚如何做到這一點,我一直在尋找usort而類似的東西,但總是虧損。

我希望有人能幫助,會很感激。

+0

你能建立第一個數組中的順序,而不是在事後排序呢? –

回答

0

試試這個

$sortedArray = []; 
foreach ($order as $termId) { 
    foreach ($objects as $object) { 
     if ($object->term_id == $termId) { 
      $sortedArray[] = $object; 
     } 
    } 
} 

$objects握着你的stdClass的實例,並$order您與有序項IDS名單。

在term_id應始終處於上升的方式排序的情況下,你可以使用usort

usort($objects, function ($obj1, $obj2) { 
    if ($obj1->term_id == $obj2->term_id) { 
     return 0; 
    } 
    return ($obj1->term_id < $obj2->term_id) ? -1 : 1; 
});