按与 stdClass 对象组合的值对多维数组进行排序


Sort multidimensional array by value that is combinded with stdClass Object

资助几个函数来对数组进行排序,但如果它们是 stdClass 对象或至少 ad 我找不到合适的函数,它们都无法对它们进行排序

我需要按排序值对这个数组进行排序

 [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
                        )
                )

任何帮助不胜感激。谢谢!

根据对象的ordering字段定义一个自定义排序函数,然后使用 usort 将其传入。

文档 for usort

function sortByOrdering($obj1, $obj2) {
   return $obj2->ordering - $obj1->ordering;
}
usort($input['data'], 'sortByOrdering');

请注意,您不需要重新分配$input = usort(...)因为数组在 usort

谢谢,思甘腾! 这正是我想要的。

我注意到生成的排序顺序是降序的。我能够通过对您的函数进行简单更改来扭转这种情况 - 我在 return 语句上交换了 $obj 1 和 $obj 2:

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"值升序重新调整数组 $skills_nav。以下是完成任务的最终代码:

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

为了进一步向读者解释,函数 sortBySort 期望的两个参数由 USORT 自动提供。 这由手册中的 USORT 函数解释。