PHP自定义数组排序需用usort()、uasort()或array_multisort():usort()用于索引数组升序;按绝对值排序在回调中用abs();uasort()保留关联键名;多维数组按子键排序直接访问字段;array_multisort()支持多条件稳定排序。
如果您需要对 PHP 数组中的元素按值的大小进行排序,并且要求排序逻辑可自定义(例如按绝对值、字符串长度、多维字段等),则不能仅依赖内置的 sort() 或 rsort() 函数。以下是实现该目标的多种方法:
usort() 允许传入用户自定义的比较函数,PHP 会根据该函数的返回值决定元素顺序,适用于索引数组且不保留键名。该方法灵活、简洁,适合大多数单维数值或简单结构排序需求。
1、定义待排序的数组,例如 $arr = [3, 1, 4, 1, 5];
2、调用 usort(),传入数组和匿名比较函数:usort($arr, function($a, $b) { return $a $b; });
3、执行后 $arr 将变为 [1, 1, 3, 4, 5],完成升序排列。
当数组包含负数,而您希望忽略符号、仅依据数值大小排序时,需在比较函数中对参数取绝对值。此方式避免了先映射再排序的额外内存开销,直接在比较阶段介入。
1、定义数组,例如 $arr = [-5, 3, -1, 8];
2、调用 usort() 并在闭包中使用 abs():usort($arr, function($a, $b) { return abs($a) abs($b); });
3、执行后 $arr 变为 [-1, 3, -5, 8],即按 绝对值从小到大 排列。
若原始数组为关联数组(如 ['a' => 10, 'b' => 2, 'c' => 15]),且需按值排序但保留键与值的对应关系,则必须使用 uasort()。它与 usort() 行为一致,但不重置键名。
1、声明关联数组:$data = ['apple' => 23, 'banana' => 7, 'cherry' => 19];
2、调用 uasort() 并传入比较逻辑:uasort($data, function($v1, $v2) { return $v1 $v2; });
3、排序后 $data 的键值对顺序改变,但 'banana' => 7 仍存在且位于首位,键名未丢失。
当数组元素为关联子数组(如 [['name'=>'A','score'=>85], ['name'=>'B','score'=>92]]),需按 'score' 字段排序时,可在比较函数中提取并比较对应键的值。此方法无需预处理,直接在回调中访问深层结构。
1、定义多维数组:$students = [['name'=>'Alice','score'=>85], ['name'=>'Bob','score'=>92], ['name'=>'Charlie','score'=>78]];
2、使用 usort(),在闭包中读取 'score' 键:usort($students, function($a, $b) { return $a['score'] $b['score']; });
3、结果数组按 score 升序排列,首位元素为 ['name'=>'Charlie','score'=>78]
。
当需按多个字段先后排序(例如先按 type 升序,type 相同时按 created_at 降序),array_multisort() 提供更可控的稳定性保障,且支持独立提取排序列,避免嵌套回调复杂度。
1、提取待排序字段:$types = array_column($items, 'type'); $times = array_column($items, 'created_at');
2、调用 array_multisort(),依次传入字段及排序标志:array_multisort($types, SORT_ASC, $times, SORT_DESC, $items);
3、$items 被原地重排,满足 type 升序优先、同 type 内 created_at 降序 的复合规则。
# php
# app
# apple
# 键值对
# 排列
# 关联数组
# 多维数组
# sort
# rsort
# 字符串
# 循环
# 闭包
# function
# 升序
# 多维
# 自定义
# 键名
# 回调
# 首位
# 多条
# 键值
# 包中
# 降序
相关文章:
如何通过PHP快速构建高效问答网站功能?
如何批量查询域名的建站时间记录?
html制作网站的步骤有哪些,iapp如何添加网页?
建站之星下载版如何获取与安装?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何快速生成高效建站系统源代码?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
C++中引用和指针有什么区别?(代码说明)
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
建站之星上传入口如何快速找到?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
建站之星后台管理如何实现高效配置?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
C++时间戳转换成日期时间的步骤和示例代码
如何快速完成中国万网建站详细流程?
,如何利用word制作宣传手册?
建站之星如何开启自定义404页面避免用户流失?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
兔展官网 在线制作,怎样制作微信请帖?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何用虚拟主机快速搭建网站?详细步骤解析
建站之星如何通过成品分离优化网站效率?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何在Tomcat中配置并部署网站项目?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
香港服务器租用费用高吗?如何避免常见误区?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
如何在宝塔面板中创建新站点?
网站制作公司,橙子建站是合法的吗?
焦点电影公司作品,电影焦点结局是什么?
如何在Golang中指定模块版本_使用go.mod控制版本号
定制建站策划方案_专业建站与网站建设方案一站式指南
制作网页的网站有哪些,电脑上怎么做网页?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何续费美橙建站之星域名及服务?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何撰写建站申请书?关键要点有哪些?
如何选择PHP开源工具快速搭建网站?
如何设置并定期更换建站之星安全管理员密码?
大型企业网站制作流程,做网站需要注册公司吗?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
建站之星安装步骤有哪些常见问题?
如何通过建站之星自助学习解决操作问题?
网站制作模板下载什么软件,ppt模板免费下载网站?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
,巨量百应是干嘛的?
建站之星后台管理系统如何操作?
做企业网站制作流程,企业网站制作基本流程有哪些?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
*请认真填写需求信息,我们会在24小时内与您取得联系。