ソムリエでエンジニアのブログ

ワインの事も書きたいけど基本エンジニア用

Laravelでコレクションをfilterする際にインデックスを連番にする方法

はじめに

最近Laravelのコレクションを積極的に使用しています。

readouble.com

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',
)  

結果を連番で取得する事ができました。
以上になります!