使用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
相关产品推荐
相关产品推荐

