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

Laravel使用sortBy处理含空数组的集合返回空数组如何解决

问题原因

当使用sortBy对包含空数组的集合按指定字段排序时,空数组不存在对应排序字段,Laravel会默认取null作为排序值。默认排序规则中null的排序优先级高于有效数值,因此空数组会被排在排序结果的最前面,最终调用first()就会拿到不符合预期的空数组。

解决方案

根据你的业务需求可以选择以下两种常用方案:

  • 方案1:排序前过滤空数组(不需要保留空数组时首选,实现最简单)
    调用filter()方法先移除集合中的空数组、null等空值元素,再执行排序:

    $first = [];
    $second = ['created_at'=>2];
    $third= [$first , $second];
    $res = collect($third)->filter()->sortBy('created_at')->first();
    dd($res);
    
  • 方案2:自定义排序规则保留空数组(需要保留空数组仅调整排序顺序时使用)
    给sortBy传入自定义回调,给不存在created_at字段的元素设置一个足够大的默认排序值,让空数组自动排在排序结果的末尾:

    $res = collect($third)->sortBy(function ($item) {
        return $item['created_at'] ?? PHP_INT_MAX;
    })->first();
    

    如果你希望空数组排在最前面仅要排除掉拿空的情况,调整为$res = collect($third)->sortBy('created_at')->whereNotNull('created_at')->first();也可以实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:09:03