如何创建Laravel对象集合而非数组集合
如何将Laravel数组集合转为对象集合
嘿,我来帮你搞定这个问题!你当前的代码生成的是嵌套数组的集合,要转换成对象集合的话,有几种实用的方法,我给你一一拆解:
方法1:用map转成stdClass对象
这是最快捷的方式,利用PHP的类型强制转换把每个数组元素转成标准对象:
$result = collect([ 'foo' => ['success' => 0, 'failed' => 0], 'bar' => ['success' => 0, 'failed' => 0] ])->map(function ($item) { return (object)$item; });
之后你就可以用对象属性的方式访问值了,比如$result['foo']->success。
方法2:自定义类实现更可控的对象
如果需要对这些对象添加方法或者更严格的属性约束,可以创建一个自定义PHP类:
class Status { public int $success; public int $failed; public function __construct(int $success, int $failed) { $this->success = $success; $this->failed = $failed; } // 还可以添加自定义方法,比如计算总数 public function total(): int { return $this->success + $this->failed; } }
然后通过map实例化这个类:
$result = collect([ 'foo' => ['success' => 0, 'failed' => 0], 'bar' => ['success' => 0, 'failed' => 0] ])->map(function ($item) { return new Status($item['success'], $item['failed']); });
这种方式的优势是可以让你的对象拥有业务逻辑,扩展性更强。
方法3:先转换数组元素再创建集合
如果你不想用map,也可以先把原数组的每个元素转成对象,再传入collect:
$rawData = [ 'foo' => (object)['success' => 0, 'failed' => 0], 'bar' => (object)['success' => 0, 'failed' => 0] ]; $result = collect($rawData);
这种方式更直观,适合简单的场景。
不管用哪种方法,最终得到的$result都是Laravel集合实例,里面的元素都是对象而非数组啦!
内容的提问来源于stack exchange,提问作者Elbo Shindi Pangestu
相关产品推荐
相关产品推荐

