【发布时间】:2021-10-29 05:31:56
【问题描述】:
我有一个这样的序列化字符串
$string = '[{"name":"FOO"},{"name":""},{"name":"BAR"}]';
我正在尝试通过 Laravel Collection 的过滤器方法处理它,并消除没有定义“名称”属性的项目。
$collection = collect(\json_decode($string));
$collection = $collection->filter(function($v){
return !empty($v->name);
});
$string = \json_encode($collection->toArray());
dd($string);
通常我期待这样的事情:
[{"name":"FOO"},{"name":"BAR"}]
但我得到的是这样的:
{"0":{"name":"FOO"},"2":{"name":"BAR"}}
有趣的是,如果我跳过过滤过程或每次都返回 true,我会不断获得所需格式的字符串。删除toArray() 调用具有相同的结果。我不想将数字索引保留为关联对象键。
为什么会出现这种异常?我应该怎么做才能获得所需格式的序列化数据?
【问题讨论】:
-
我不知道为什么,但你能试试这个:$string = \json_encode($collection->values());
-
是的,values() 调用对我有用。谢谢。虽然,我仍然很好奇为什么 toArray() 不起作用。
-
我认为集合会自动添加索引,因为您有键名,并且数组中的所有元素不能使用相同的键
标签: laravel serialization laravel-collection