如何解决Laravel 对象集合导致关联数组而不是对象?
我想继续使用它作为一个对象。
$obj = (object) ['count'=>1,'Now'=>Carbon::Now()];
dump($obj); // $obj->count = 1,$obj->Now = Carbon {...}
$collection = collect($obj);
dump($collection); // unwanted: $collection['count'] = 1,$collection['Now'] = Carbon {...}
在 similar question 中,提供的解决方案是 json_encode
/json_decode
$collection
。
但这会修改对象并丢失信息(例如,将 Now
Carbon 对象转换为字符串)。
$collection = json_decode(collect($obj)->toJson());
dump($collection); // unwanted: $collection->count = 1,$collection->Now = "2021-05-25T10:43:34.301505Z"
如何将对象包装到集合中而不将其转换为关联数组?
解决方法
也许这是因为一个集合被认为是一个包含多个条目的数组。从技术上讲,您只传递一个未包装的条目,其属性被视为集合的数组条目。所以我想说,你使用的集合是错误的。
来自the docs:
Illuminate\Support\Collection 类为处理数组数据提供了流畅、方便的包装器。
强调这一点的另一种方式是,Collection
类实现了 ArrayAccess
接口。因此,会发生这种情况:通过 Collection
创建 collect()
时,传递的数据设置为 $this->items
。所以 Collection
不是数组,它只是让您通过数组符号访问 $this->items
的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。