2016-12-26 17 views
1

私は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' 
     ] 
]); 

私がテストしてみました - >プッシュ()、 - >置く()、 - >先頭に追加( )しかし、成功はありません。これを行う最善の方法を教えてください。

答えて

0

コレクションのコレクションではなく、配列のコレクションがあることに注意してください。したがって、サブアレイにpush(),put()などを使用することはできません。

最も簡単な方法は、単にアレイとしてそれを治療するための、おそらくです:

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

しかし、あなたがしたい場合、あなたはまた、ゲッターを通じて少なくとも第1の要素にアクセスすることができます

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

は、[I「は$しようとしたときにあなたの答えをありがとうしかし 0] ['occupation'] = 'エンジニア'; "次のようにエラーが発生しました: $ a [0] ['occupation'] = 'エンジニア'; 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); 
関連する問題