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

PHP如何按对象属性排序数组,让非空observation字段的项优先排列

你的原有代码无法生效主要有两个原因:

  1. 访问方式不匹配:你给出的示例数据是PHP关联数组结构,原代码使用->访问对象属性的写法不适用于数组,需要调整为[]读取数组键值。如果你调用json_decode时传入了第二个参数true,解析结果就是关联数组;如果没传该参数得到的是标准对象,保持->写法即可。
  2. 排序逻辑不符合需求:直接用strcmp比较时,null会被转换为空字符串,默认会排在非空字符串前面,和你要求的「非空observation优先」规则相反。

正确实现代码

usort($this->rewards, function ($a, $b) {
    // 先判断observation的非空优先级
    $aHasObs = !is_null($a['observation']);
    $bHasObs = !is_null($b['observation']);

    if ($aHasObs && !$bHasObs) {
        return -1; // 非空条目排前面
    }
    if (!$aHasObs && $bHasObs) {
        return 1; // 空条目排后面
    }

    // 同优先级(都非空/都为空)时按description升序排序,完全匹配你的预期输出
    return strcmp($a['description'], $b['description']);
});

如果你的解析结果是对象,把代码中所有$a['xxx']、$b['xxx']替换为$a->xxx、$b->xxx即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:39:03