gpt4 book ai didi

php - Laravel 集合将数组转换为对象

转载 作者:可可西里 更新时间:2023-11-01 13:33:52 26 4
gpt4 key购买 nike

如果我运行 $collection->filter(myFilter),Laravel 会像这样向集合中的每个模型添加键,这很烦人:

{
"4": {
"myObject": "data"
},
"7": {
"myObject": "data"
}
}

如何去掉“4”和“7”,使其成为我的对象数组?

我运行的代码是:

$obj = Cars::with('brand')->orderBy('id')->get();

return $obj->filter(function($value, $key)
{
return $value->display == true;
});

最佳答案

问题是 filter() 方法不会重新设置底层集合数组的键。所以,Collection 仍然代表一个数组,只是你的数组看起来像这样:

[
4 => Object4,
7 => Object7,
]

虽然这在 PHP 中是一个完全有效的数组,但在 JSON 中这不是一个正确的数组。由于这不能表示为 JSON 中的数组,因此将其转换为 JSON 中的对象。

为了将其正确表示为 JSON 中的数组,您只需重新键入 Collection 数组。正确的方法是 values() 方法。它所做的只是在底层数组上调用 array_values。这将把上面的数组变成这样:

[
0 => Object4,
1 => Object7,
]

现在,这是一个正确的数字索引数组,JSON 可以理解并将其视为数组而不是对象。

虽然 flatten 可能适用于这种特殊情况(您的集合是 Eloquent 模型的集合),但它实际上并不是正确的方法,并且可能会导致意想不到的后果。此外,它将执行许多不需要的额外逻辑。最好的办法是针对您要实现的目标使用正确的方法,即 values() 方法。

$obj = Cars::with('brand')->orderBy('id')->get();

return $obj->filter(function($value, $key)
{
return $value->display == true;
})
->values();

关于php - Laravel 集合将数组转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42182919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com