如何将二维数组转换为集合laravel?

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)