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

使用usort排序对象数组时出错:参数应为数组却传入对象

usort() 参数错误原因解析

嘿,这个错误我太熟了,咱们一步步来搞清楚为啥会出现它:

错误核心原因

usort() 是PHP里专门用来对数组做自定义排序的函数,它要求第一个参数必须是数组类型。但你传入的是一个对象(比如可能是ORM返回的集合对象、stdClass实例这类),PHP检测到类型不匹配,就抛出了 usort() expects parameter 1 to be array, object given 这个错误。

常见场景示例

比如你可能写了类似这样的代码:

// 假设$items是一个对象(比如Laravel的Collection)
usort($items, function($a, $b) {
    return $a->created_at - $b->created_at;
});

这里的$items不是数组,而是对象,自然会触发报错。

怎么解决?

分两种情况处理:

  • 如果是框架的集合对象(比如Laravel的Collection):直接用集合自带的排序方法就行,不用usort()。比如:
    // 按某个字段升序排序
    $sortedItems = $items->sortBy('id');
    // 自定义排序逻辑
    $sortedItems = $items->sort(function($a, $b) {
        return $a->created_at <=> $b->created_at;
    });
    
  • 如果是普通对象:先把它转换成数组再用usort()。比如用强制类型转换,或者get_object_vars()方法:
    // 强制转成数组
    $arrayData = (array)$yourObject;
    usort($arrayData, function($a, $b) {
        return $a['id'] - $b['id'];
    });
    

小提示

下次遇到这类类型错误,可以先用var_dump($yourVariable)或者gettype($yourVariable)确认一下变量的实际类型,避免把对象当成数组来用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:14:48