はじめに
最近Laravelのコレクションを積極的に使用しています。
filter
を使ってフィルタリングする処理を実装した際、インデックスが飛び飛びになり、その後の処理に影響がでてしまう場面が、
今回は、filter
使用時にインデックスを連番で返却する方法紹介します。
環境について
動作確認は2021年9月現在で最新のLaravel8系で実施しています。
それ以前のバージョンに関しても同様の方法で対応する事が可能かと思います。
filterの挙動を確認
実際にコレクションを作成し、filter
の動きを確認します。
<?php $foods = ['egg', 'wine', 'pizza', 'apple']; $fruits = collect($foods)->filter(function ($food) { return $food === 'apple'; });
コードの内容はともかく$fruits
を出力してみると以下のようになります。
array ( 3 => 'apple', )
インデックスを連番にする
values
を利用する事でインデックスが振り直されフィルタリング結果を連番にする事ができます。
<?php $foods = ['egg', 'wine', 'pizza', 'apple']; $fruits = collect($foods)->filter(function ($food) { return $food === 'apple'; })->values();
結果を見ると、、、
array ( 0 => 'apple', )
結果を連番で取得する事ができました。
以上になります!