资助几个函数来对数组进行排序,但如果它们是 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 函数解释。