2012-05-17 75 views
0

基金几个函数进行排序数组,但如果他们是stdClass的对象或广告至少我无法找到合适的人按值排序多维数组是combinded与stdClass的对象

我需要梳理他们都可以对它们进行排序此阵列通过订购价值

[data] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 12 
          [name] => Title1 
          [ordering] => 1 
         ) 

        [1] => stdClass Object 
         (
          [id] => 14 
          [name] => Title2 
          [ordering] => 3 
         ) 

        [2] => stdClass Object 
         (
          [id] => 18 
          [name] => Title4 
          [ordering] => 2 
         ) 

        [3] => stdClass Object 
         (
          [id] => 22 
          [name] => Title5 
          [ordering] => 4 
         ) 

       ) 

任何帮助表示赞赏。谢谢!

回答

3

根据对象的ordering字段定义自定义排序功能,然后使用usort传递它。

docs for usort

function sortByOrdering($obj1, $obj2) { 
    return $obj2->ordering - $obj1->ordering; 
} 

usort($input['data'], 'sortByOrdering'); 

注意,由于该阵列内usort

+0

谢谢。这工作得很好! – Benn

0

谢谢,SiGanteng引用你不需要重新分配$input = usort(...)!这正是我正在寻找的。

我注意到由此产生的排序顺序是降序。我能够扭转这种用一个简单的改变你的函数 - 我换$ OBJ1和$ obj2的上return语句:

return $obj1->ordering - $obj2->ordering; 

在我的应用程序,该阵列中的数据是:

Array 
(
    [3] => stdClass Object 
     (
      [term_id] => 3 
      [name] => Salesperson 
      [slug] => 01-salesperson 
      [term_group] => 0 
      [term_order] => 0 
      [term_taxonomy_id] => 3 
      [taxonomy] => skill 
      [description] => 
      [parent] => 0 
      [count] => 6 
      [object_id] => 53 
     ) 

    [5] => stdClass Object 
     (
      [term_id] => 5 
      [name] => Airport Security 
      [slug] => 02-airport-security 
      [term_group] => 0 
      [term_order] => 0 
      [term_taxonomy_id] => 5 
      [taxonomy] => skill 
      [description] => 
      [parent] => 0 
      [count] => 30 
      [object_id] => 575 
     ) 

    [4] => stdClass Object 
     (
      [term_id] => 4 
      [name] => Baker 
      [slug] => 03-baker 
      [term_group] => 0 
      [term_order] => 0 
      [term_taxonomy_id] => 4 
      [taxonomy] => skill 
      [description] => 
      [parent] => 0 
      [count] => 28 
      [object_id] => 453 
     ) 
) 

使用上面的数据,我需要通过“slug”值升序排列$ skill_nav。下面是其完成任务的最终代码:

function sortByOrdering($obj1, $obj2) { 
    return $obj1->slug - $obj2->slug; 
} 
usort($skills_nav, 'sortByOrdering'); 

为了给读者进一步解释,按功能sortByOrdering预期的两个参数是由USORT自动提供。这由手册中的USORT功能解释。