You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP多维数组按值而非键排序:按姓氏字母序排列学生并保留提交数据

解决方案

你选择uasort排序是完全正确的,这个函数会保留数组原有键名(学生ID),且会将每个学生的完整数组条目(包含submissions字段的所有提交数据)作为整体排序,不会出现数据分离的问题。你之前没有得到有效结果大概率是两个原因:比较函数逻辑错误,或是误将uasort的返回值当成排序后的数组使用(uasort是原地修改原数组,返回值仅为布尔类型的操作成功/失败标识)。

适配PHP7+的最简代码

直接使用匿名函数+strcmp字符串比较即可实现需求:

// 原地排序$array['students'],按lastName字母升序排列
uasort($array['students'], function($a, $b) {
    return strcmp($a['lastName'], $b['lastName']);
});

// 排序后直接使用原$array变量即可,学生条目已经按姓氏排序,所有关联数据保留
print_r($array['students']);

兼容低版本PHP的写法

如果需要支持PHP5.x版本,可以单独定义比较函数:

function cmp_by_lastname($a, $b) {
    return strcmp($a['lastName'], $b['lastName']);
}

uasort($array['students'], 'cmp_by_lastname');

排序效果验证

按照你给出的示例数组,排序后$array['students']的条目顺序为:

  1. studentID=12:Amy Appleton(姓氏Appleton字母序最靠前)
  2. studentID=13:Zeke Lee(姓氏Lee排在第二位)
  3. studentID=11:John Smith(姓氏Smith排在最后)
    每个学生对应的submissions提交数据会完全跟随所属学生条目移动,不会出现绑定错误。

内容的提问来源于stack exchange,提问作者Mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:57:04