我正在尝试使用collection filter()方法过滤以下集合:
$collection = Word::all();
其中JSON输出如下所示:
[
{
"id": "1",
"word": "dog",
"phonetic": "dog",
"mean": "pies",
"assoc": "some example text",
"author_id": "3",
"user_id": "3"
},
{
"id": "2",
"word": "sun",
"phonetic": "sun",
"mean": "słońce",
"assoc": "lorem ipsun dolor sit amet",
"author_id": "3",
"user_id": "2"
}, ...
]
但是,在筛选集合时:
$filtered_collection = $collection->filter(function($item)
{
if($item->isDog())
{
return $item;
}
});
过滤后的集合JSON输出如下所示:
{"1":
{
"id": "1",
"word": "dog",
"phonetic": "dog",
"mean": "pies",
"assoc": "some example text",
"author_id": "3",
"user_id": "3"
},
"2":
{
"id": "2",
"word": "sun",
"phonetic": "sun",
"mean": "słońce",
"assoc": "lorem ipsun dolor sit amet",
"author_id": "3",
"user_id": "2"
}}
在过滤一个集合的时候,我怎样才能保留原始的JSON输出呢?我希望在过滤原始集合的时候有一个我的Eloquent模型示例的数组。
4条答案
按热度按时间7uhlpewt1#
集合的
filter
方法调用底层数组的array_filter
,according to the PHP docs保留了数组键,这将导致数组转换为JavaScript对象而不是数组。在集合上调用
values()
以重置基础数组上的键:9o685dep2#
只需将其转换为JSON,并记住Laravel文档中的说明:
**注意:**当过滤一个集合并将其转换为JSON时,尝试首先调用values函数来重置数组的键。
所以最后的代码应该是:
holgip5t3#
从数据库中过滤也可以用这种方法完成。
6kkfgxo04#
如果你有雄辩的集合数组,你想从一些属性过滤它,你可以尝试下面的过滤器来实现这一点。
在我的例子中,$reports是包含雄辩集合对象的变量。我想用id属性从这个集合中过滤。
现在你有了包含id=5的对象的**$filter_id**变量。
您可以访问id=5所有属性,例如$filter_id-〉attribute_name。