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

PHP中基于固定嵌套键discipline_one对多维数组排序的实现方法

错误原因

  • 核心错误为键名拼写不匹配:你的数组中存储二级数据的键是复数results,但你嵌套调用array_column时使用的是单数result,导致第一层提取结果的数组长度和原数组不一致,触发array_multisort的参数长度校验报错。
  • 次要问题为排序方向错误:你需要的是耗时越短排名越靠前,对应应该使用升序SORT_ASC,而非之前排序分数用的降序SORT_DESC。

解决方案

方案1:修正array_multisort写法

直接修正键名和排序方向即可正常运行:

array_multisort(array_column(array_column($data, 'results'), 'discipline_one'), SORT_ASC, $data);

方案2:使用usort+时间数值化比较(兼容性更强)

如果后续时间数据可能出现大于10分钟的情况,直接按字符串排序会出现逻辑错误(比如10:01的字符串排序结果会小于9:59),推荐把时间转换为总秒数后再比较,PHP7+可通过太空船操作符简化写法:

usort($data, function ($itemA, $itemB) {
    // 自定义方法把分:秒格式转为总秒数
    $parseTime = function ($timeStr) {
        list($min, $sec) = explode(':', $timeStr);
        return $min * 60 + $sec;
    };
    return $parseTime($itemA['results']['discipline_one']) <=> $parseTime($itemB['results']['discipline_one']);
});

两种方案执行后,$data的id顺序都符合你要求的3, 2, 1, 4。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:15:07