pull — コレクションから値を取得しつつ削除する

collection
  • カテゴリ: collection
  • 種類: メソッド
  • 掲載バージョン: Laravel 12 / PHP 8.4
  • FQCN: Illuminate\Support\Collection::pull
  • 関連: get, forget, only, except
  • 変更履歴: なし(長期安定)

要点(TL;DR)

  • 使いどころ:キー指定で値を取り出し、その要素を同時にコレクションから削除したいとき
  • 最小例$value = $collection->pull('key');
  • よくある罠
    • 破壊的メソッド(元のコレクションが変更される)
    • 存在しないキーは既定値を返すだけでエラーにならない
    • ネスト指定はドット記法のみ対応

概要

pull は、コレクションから 指定キーの値を取得しつつ、その要素を削除 するメソッドです。
設定値の消費、キュー的な扱い、処理済みデータの切り出しなどで使われます。
配列の unsetget を同時に行うイメージです。

構文 / シグネチャ

public function pull($key, $default = null): mixed

引数

引数必須既定値説明
$keystring|intはい取得・削除するキー(ドット記法可)
$defaultmixedいいえnullキーが存在しない場合に返す値
  • 戻り値mixed(取得した値、または既定値)
  • 副作用:指定キーがコレクションから削除される

使用例

最小例

use Illuminate\Support\Collection;

$collection = collect([
    'name' => 'Laravel',
    'version' => 12,
]);

$version = $collection->pull('version');

// $version === 12
// $collection === collect(['name' => 'Laravel'])

既定値付き

$value = $collection->pull('not_exists', 'default');
// 'default' が返る。コレクションは変更なし

実務例:設定値を消費する

$options = collect([
    'limit' => 10,
    'offset' => 0,
    'debug' => true,
]);

$limit = $options->pull('limit');
$offset = $options->pull('offset');

// $options には 'debug' だけが残る

ネスト構造(ドット記法)

$data = collect([
    'user' => [
        'name' => 'Taro',
        'role' => 'admin',
    ],
]);

$role = $data->pull('user.role');

// $role === 'admin'
// user 配下から role が削除される

よくある落とし穴・注意

  • 破壊的操作
    pull は元のコレクションを書き換えます。再利用する場合は注意。
  • 存在チェック不要だが見落としやすい
    キーがなくても例外は出ません。意図せず既定値を使っていないか注意。
  • LazyCollection 非対応
    pull は即時評価が前提。LazyCollection では使えません。

代替・関連APIとの比較

メソッド取得削除破壊的用途
get××値を読むだけ
forget×削除のみ
pull取得+削除
only××必要なキーだけ抽出
except××指定キー以外を残す

選定基準
「一度使った値を残したくない」なら pull

テスト例(Pest)

it('pull removes the value from collection', function () {
    $c = collect(['a' => 1, 'b' => 2]);

    $value = $c->pull('a');

    expect($value)->toBe(1);
    expect($c->has('a'))->toBeFalse();
});

トラブルシュート

症状原因対処
値が消えているpull が破壊的get に変更する
null が返るキーが存在しない既定値を指定する
ネストで取得できない配列形式が違うドット記法を確認

参考リンク

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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