(Laravel 5.3)如何在现有Collection中为现有子数组添加新键和值?

时间:2016-12-26 21:50:03

标签: php laravel laravel-5 laravel-5.3

我使用的是Laravel 5.3。

现有Collection $ a是

$a = collect(
[
 0 =>[
      'firstName' => 'John',
      'lastName' => 'Doe'
     ],
1 =>[
     'firstName' => 'Mary',
     'lastName' => 'Jane'
    ]
]);

,期望的结果如下:

$a = collect(
[
 0 => [
       'firstName' => 'John',
       'lastName' => 'Doe',
       'occupation' => 'engineer'
      ],
 1 => [
       'firstName' => 'Mary',
       'lastName' => 'Jane',
       'occupation' => 'accountant'
      ]
]);

我尝试测试 - > push(), - > put(), - > prepend()但没有成功。请让我知道最好的方法。

3 个答案:

答案 0 :(得分:0)

请注意,您有一组数组,而不是集合的集合。因此,您无法在子数组中使用push()put()等。

最简单的方法可能只是将其视为一个数组:

$a[0]['occupation'] = 'engineer';

但如果您愿意,也可以通过getter至少访问第一个元素:

$a->get(0)['occupation'] = 'engineer';

答案 1 :(得分:0)

如果您有一个现有的集合,那么您可以使用以下内容从中获取所有数组:

$items = $existingCollection->all();

现在,您在$items中有一个数组数组。因此,您可以使用以下内容添加键/值:

$item[0]['occupation'] = 'engineer';
$item[1]['occupation'] = 'accountant';

现在,您已修改了数组,因此如果您想将其重新转换为集合,那么您可以使用此方法轻松完成:

 $existingCollection = collect($items);

您也可以直接在集合中使用map,例如:

$existingCollection->map(function ($person) {
    $person['occupation'] = 'engineer';
    return $person;
});

在这种情况下,你可以看到,所有人的职业都是一样的,但你可以找到一种方法来改变,但我不能给你更精确的解决方案,因为我不太了解你的情况(你没有多少分享)。

答案 2 :(得分:0)

您可以使用transform方法迭代集合,并使用集合中的每个项目调用给定的回调。集合中的项目将替换为回调返回的值:

$a->transform(function ($item, $key) {
    $item['occupation'] = 'some_value';
    retrun $item;
});

然后检查$a

的值
dd($a);