2016-12-26 16 views
1

我正在使用Laravel 5.3。(Laravel 5.3)如何向現有集合中的現有子數組添加新的鍵和值?

現有集合$ 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' 
     ] 
]); 

我試圖測試 - >推(), - >放(), - >前置( )但沒有成功。請讓我知道做到這一點的最佳方式。

回答

0

請注意,您擁有數組的集合,而不是集合的集合。因此,您不能在子陣列中使用push()put()等。

最簡單的方法可能只是把它當作一個數組:

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

但你也可以至少通過吸氣訪問的第一個元素,如果你想:

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

謝謝您的回答,但 當我試圖「$ A [ 0] ['職業'] ='工程師';「我得到一個錯誤,如下所示: $ a [0] ['occupation'] ='engineer'; Illuminate \ Support \ Collection的重載元素的間接修改不起作用 –

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

在這種情況下,你可以看到,所有的人的職業將是相同的,但你可以找到一種改變方式,但我不能給你更精確的解決方案,因爲我不瞭解你的情況(你沒有太多共享)。

0

您可以使用transform方法迭代集合並調用集合中每個項目的給定回調。集合中的項目將通過回調返回值來代替:

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

然後檢查的$a值:

dd($a); 
相關問題