我使用的是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()但没有成功。请让我知道最好的方法。
答案 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);