Suc*_*Man 5 arrays collections laravel laravel-5.6
我有这样的数组:
$test = array(
array(
'name' => 'Christina',
'age' => '25'
),
array(
'name' => 'Agis',
'age' => '22'
),
array(
'name' => 'Agnes',
'age' => '30'
)
);
Run Code Online (Sandbox Code Playgroud)
我想把它改成收藏 laravel
我尝试这样:
collect($test)
Run Code Online (Sandbox Code Playgroud)
结果并不完美。仍然有一个数组
我怎么解决这个问题?
Dwi*_*ght 12
collect($test)不会转换$test为集合,而是$test作为集合返回。您需要将其返回值用于新变量,或覆盖现有变量。
$test = collect($test);
Run Code Online (Sandbox Code Playgroud)
如果您想将单个项目转换为对象(而不是数组),就像您在下面的评论中指出的那样,那么您需要对它们进行转换。
$test = collect($test)->map(function ($item) {
return (object) $item;
});
Run Code Online (Sandbox Code Playgroud)
小智 5
我知道已经有一段时间了,但我在 laracast 上找到了这个答案,它似乎更好地解决了这个问题,因为它使它递归。我从https://gist.github.com/brunogaspar/154fb2f99a7f83003ef35fd4b5655935 github获得的这个解决方案 非常有效。
\Illuminate\Support\Collection::macro('recursive', function () {
return $this->map(function ($value) {
if (is_array($value) || is_object($value)) {
return collect($value)->recursive();
}
return $value;
});
Run Code Online (Sandbox Code Playgroud)
});
比你去像:
$data = [
[
'name' => 'John Doe',
'emails' => [
'john@doe.com',
'john.doe@example.com',
],
'contacts' => [
[
'name' => 'Richard Tea',
'emails' => [
'richard.tea@example.com',
],
],
[
'name' => 'Fergus Douchebag', // Ya, this was randomly generated for me :)
'emails' => [
'fergus@douchebag.com',
],
],
],
],
];
$collection = collect($data)->recursive();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5573 次 |
| 最近记录: |