概念
今までlaravelのコレクションのpop()
とshift()
が一つのアイテムだけを削除し、返すことでしたが、Laravel8.52に含まれているこのPRでは、引数が受け取れるようになって、複数のアイテムを返すようになりました。
使い方
基本
返したいレコード数をpop()
かshift()
に引数として渡すと、そのレコード数がコレクションから削除され、新しいコレクションとして返されます。いずれの関数のデフォルト引数値が1
ですので、引数を定義しない場合には、今までと同じように1アイテムがコレクションから削除され、返されます。
$collect = collect([
'Craig',
'is',
'very',
'handsome!'
]);
// 最後の二つのアイテムを削除し、新しいコレクションとして返す
$collect->pop(2);
// collect(['handsome!', 'very']);
$collect->all();
// ['Craig', is];
// 最後のアイテムを削除し、返す
$collect->pop();
// 'is'
shift()
の関数はpop()
と違って「最後」
のではなく、「最初」
のアイテムを処理する動きで、実行の仕方も同じなので、ここで省略します。
注意
コレクションのアイテム数より大きいな引数を渡すと、返されるコレクションのサイズが必ず渡された値になるので、存在しないアイテムの分がNULL
として返されたコレクションに入れるので気を付ける必要があります。
// 4アイテムのコレクションを作る
$collect = collect([
'Craig',
'is',
'very',
'handsome!'
]);
// 最初の6つのアイテムを削除し、返す
$collect->shift(6);
// 存在しないアイテムの分がNULLとして入ってしまします
// collect(['Craig', 'is', 'very', 'handsome!', NULL, NULL])
参照
https://github.com/laravel/framework/pull/38093
https://laravel.com/docs/8.x/collections#method-pop
https://laravel.com/docs/8.x/collections#method-shift