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

PHP usort数组排序 如何将Undefined元素前置其余降序

PHP二维数组自定义排序实现(Undefined值置顶+数值降序)

问题场景

存在二维数组$unresponsives,每个子数组索引5位为时长字段,包含两类值:

  • 格式类似"2327.02 Hours"的有效时长字符串
  • 固定字符串"Undefined"
    原有usort排序逻辑仅实现了有效时长的降序排列,会将Undefined条目排到末尾,需要调整规则将所有Undefined条目置顶,剩余条目仍按时长降序排列。

实现代码

直接修改usort的比较函数即可,完整代码如下:

usort($unresponsives, function ($unresponsive1, $unresponsive2) {
    $val1 = $unresponsive1[5];
    $val2 = $unresponsive2[5];

    // 优先判断Undefined值,统一置顶
    $isUndef1 = $val1 === 'Undefined';
    $isUndef2 = $val2 === 'Undefined';
    if ($isUndef1 && $isUndef2) {
        return 0;
    }
    if ($isUndef1) {
        return -1;
    }
    if ($isUndef2) {
        return 1;
    }

    // 非Undefined值按小时数降序排序
    return floatval($val2) <=> floatval($val1);
});

逻辑说明

  • 比较时先判断两个对比项的时长字段是否为Undefined,只要其中一个是该值,就优先把它放到更靠前的位置;两个都是Undefined时返回0,保留二者原有的相对顺序
  • 非Undefined的条目完全沿用原有排序逻辑,floatval会自动提取字符串开头的数字部分,不需要额外替换" Hours"后缀就能拿到正确的浮点型小时数,再通过太空船运算符<=>实现降序排列
  • 该写法兼容PHP7及以上版本,和原有代码的依赖版本完全一致,不需要调整运行环境

内容的提问来源于stack exchange,提问作者m.yagmur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:21:56