微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 对象集合导致关联数组而不是对象?

如何解决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 举报,一经查实,本站将立刻删除。