2016-07-27 64 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; 
}); 
相关问题