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

7
我有这样一个数组:

$test = array(
    array(
        'name' => 'Christina',  
        'age' => '25' 
    ),
    array(
        'name' => 'Agis', 
        'age' => '22'
    ),
    array(
        'name' => 'Agnes', 
        'age' => '30'
    )
);

我希望将其改为 Laravel 集合

我尝试了以下代码:

collect($test)

结果并不完美。仍然存在一个数组。
我该如何解决这个问题?

有没有人可以帮忙? - moses toh
3个回答

18

collect($test) 不会将 $test 转换为集合,它将返回 $test 作为集合。您需要使用其返回值来创建一个新变量或覆盖现有变量。

$test = collect($test);

如果你想将单个项目转换为对象(而不是数组),就像你在下面的评论中指出的那样,那么你需要进行类型转换。

$test = collect($test)->map(function ($item) {
    return (object) $item;
});

如果我像这样 dd{$test) 输出结果:https://postimg.cc/image/ro3mko4d9/。它是一个数组。我想要的结果是这样的:https://postimg.cc/image/fyzmwq0jx/。所以我希望它是一个对象,而不是一个数组。 - moses toh
你是在谈论单个数组项吗?如果你想让它们成为对象,那么你需要将它们转换为对象。我已经更新了答案,展示了你可能如何做到这一点。 - Dwight
也许你可以再次帮我。看看这个:https://dev59.com/B1UK5IYBdhLWcg3wqBbE。我想使用“chunk”来改变它。但我仍然不确定如何实现它。 - moses toh

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;
});

});

然后你就像这样:

$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();

2

分享更多的信息。

集合是“宏处理”的,这使得您可以在运行时向Collection类添加其他方法。根据Laravel对集合的解释,数组可以是多维的。使用map函数可以将子数组扩展为对象,并扩展您的集合。

注:Original Answer翻译成“最初的回答”

$test = array(
    array(
        'name' => 'Christina',  
        'age' => '25' 
    ),
    array(
        'name' => 'Agis', 
        'age' => '22'
    ),
    array(
        'name' => 'Agnes', 
        'age' => '30'
    )
);

// can be converted using collection + map function
$test = collect($test)->map(function($inner_child){
    return (Object) $inner_child;
});

This will cast the inner child array into Object.



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接