push — コレクション末尾に要素を追加

collection
  • カテゴリ: collection
  • 掲載バージョン: Laravel 12・PHP 8.4
  • 名前空間 / FQCN: Illuminate\Support\Collection::push
  • 関連: put, prepend, merge, concat
  • 変更履歴: なし(安定API)

要点(TL;DR)

  • 用途: コレクションの末尾に要素を追加する
  • 最小例: $collection->push($value);
  • よくある罠:
    • 破壊的(元のコレクションが変更される)
    • 連想キーは付かない(数値キーで追加)
    • LazyCollection では使えない

概要

push は、既存の Collection末尾に 1 つ以上の要素を追加するメソッドです。
配列の []= に相当し、**インプレース(破壊的)**に動作します。
ループ内での逐次追加や、処理結果の後付けに向いています。

構文 / シグネチャ

public function push(...$values): static

引数

引数必須既定値説明
$valuesmixed追加する値(複数指定可)
  • 戻り値: Collection(自身)
  • 例外/副作用: なし(元コレクションを書き換える)

使用例

最小例

use Illuminate\Support\Collection;

$collection = collect([1, 2]);
$collection->push(3);

$collection->all(); // [1, 2, 3]

複数要素の追加

$collection = collect([1]);
$collection->push(2, 3, 4);

$collection->all(); // [1, 2, 3, 4]

実務例(処理結果の後付け)

use Illuminate\Support\Collection;

$logs = collect();

foreach ($records as $record) {
    if ($record->isInvalid()) {
        $logs->push([
            'id' => $record->id,
            'reason' => 'invalid',
        ]);
    }
}

// $logs は逐次追加された結果を保持

よくある落とし穴・注意

  • 破壊的
    push は元のコレクションを変更します。
    イミュータブルに扱いたい場合は concatmerge を検討してください。
  • キーを指定できない
    連想配列として追加したい場合は put を使用します。
  • LazyCollection 非対応
    遅延評価を保ちたい場合、push は使えません。

代替・関連APIとの比較

メソッド特徴使い分け
push末尾に追加(破壊的)逐次追加したい
prepend先頭に追加順序を前に
putキー指定で追加連想キーが必要
merge配列/コレクション結合新しいコレクション
concat非破壊で結合イミュータブルに扱う

テスト例(Pest)

it('push appends values to the collection', function () {
    $collection = collect([1, 2]);

    $collection->push(3);

    expect($collection->all())->toBe([1, 2, 3]);
});

トラブルシュート(エラー別)

症状/エラー原因対処
追加されないLazyCollection を使用Collection に変換する
キーが保持されないpush は数値キーput を使う

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする