0

最初にコレクションを配列に変換せずに、コレクションのより深いインデックスに変更を加える/マージする方法はありますか?

$arrays をすべて含む 4 つのインデックスを持つ $collection があるので、配列にプッシュするには、次のようにする必要があります。

$collection = $collection->toArray(); // without this get array_push parameter 1 should be an array object given error
array_push($collection[$index], $array);

しかし、より良い方法があることを望んでいたので、先に進む前に元の $collection を再収集(...)する必要はありませんでした。以下のようなもので、うまくいかないことがわかっていますが、上記よりも厄介でないもの:

$collection->get($index)->merge($array);
4

3 に答える 3

1

コレクションArrayAccessは次の代わりにインターフェイスを実装するため:

$collection = $collection->toArray();
array_push($collection[$index], $array);

あなたが使用することができます:

array_push($collection[$index], $array);

編集

さて、オーバーロードされたプロパティを割り当てることができないというエラーが発生するため、コードは機能しませんが、コメントで他のエラーについても言及しました。

次のようなコレクションがあるとします。

$collection = collect([[1,2],[11,12],[21,22],[31,32]]);

に追加13[11,12]ます。

次のように実行できます。

$collection->put(1, array_merge($collection[1], [13]));
于 2016-08-24T22:15:33.873 に答える
0

putを使うととても簡単です

$collection->put($index, $array);

それでおしまい

コレクションの最後までプッシュしたい場合は、プッシュを使用します

$collection->push($array);

于 2016-08-25T06:41:32.307 に答える
0

上記の array_push を使用して一時的に配置したソリューションは、配列を既存の配列とマージしませんでしたが、これは機能し、もう少しエレガントに見えます。Collections が ArrayAccess インターフェイスを実装していることを指摘した Marcin Nabialek に感謝します。これは array_push の使用を解決しませんでしたが、以下の回答で既存の配列を変更でオーバーライドするために使用されました。

$collection[$index] = collect($collection->get($key))->merge($array);

コレクションの使用を促進するための改善を受け入れます。

于 2016-08-25T00:11:27.207 に答える