PHP 7+ 多维数组按order值升序排序方法咨询
在PHP 7+中按order字段对关联多维数组升序排序的方法
嘿,这个需求在日常开发里挺常见的!针对你的关联多维数组,我们可以用PHP的uasort()函数配合PHP7新增的**太空船操作符(<=>)**来实现,既能按order字段升序排序,还能保留原数组的关联键名,完美适配你的场景。
核心实现思路
uasort()是PHP专门为关联数组设计的自定义排序函数——它允许你通过自定义规则排序,同时会保留数组的键值映射关系,不会像sort()那样把键重置为数字索引。而PHP7的太空船操作符则让比较逻辑变得异常简洁,一行代码就能完成整数的大小比较。
完整代码示例
$multiArray = array( "description" => array( "order" => 3, "title" => '' ), "gallery" => array( "order" => 1, "title" => '' ), "params" => array( "order" => 2, "title" => '' ), "video" => array( "order" => 4, "title" => '' ) ); // 按order字段升序排序 uasort($multiArray, function($a, $b) { return $a['order'] <=> $b['order']; }); // 输出排序后的结果 print_r($multiArray);
代码说明
- 匿名函数作为
uasort()的回调函数,每次会接收两个待比较的子数组$a和$b - 太空船操作符
<=>会自动处理整数比较:如果$a['order']小于$b['order']返回-1,相等返回0,大于则返回1——这完全符合uasort()对回调返回值的要求,直接实现升序排序 - 排序完成后,原数组的"gallery"、"params"这些关联键会被完整保留
排序后的结果
执行上面的代码后,输出结果如下:
Array ( [gallery] => Array ( [order] => 1 [title] => ) [params] => Array ( [order] => 2 [title] => ) [description] => Array ( [order] => 3 [title] => ) [video] => Array ( [order] => 4 [title] => ) )
额外小技巧
如果之后需要改成降序排序,只需要调换回调里$a和$b的位置即可:
uasort($multiArray, function($a, $b) { return $b['order'] <=> $a['order']; });
内容的提问来源于stack exchange,提问作者Evgeniy Chorniy
相关产品推荐
相关产品推荐

