array_filter で取得した配列のインデックス
PHPの array_filter
関数は、条件に一致する要素を配列の中から抽出するフィルター関数である。
この array_filter
関数を、インデックスが数値の配列に対して実行すると、戻り値の配列は、フィルターで除外された要素のインデックスが空き番になった状態の配列が返ってくる。
実際に実験してみよう。。。
次のサンプルコードは、数値の配列から array_filter
関数を使って偶数の要素を取り出す例である。
$array = [ 1, 2, 3, 4, 5, 6, 7 ];
$filter = array_filter($array, fn($value) => $value % 2 == 0); //偶数要素のみフィルタ
dump($filter);
実行結果を見てみよう。確かに奇数の要素のインデックスが空き番になっていますね。。。
^ array:3 [
1 => 2
3 => 4
5 => 6
]
インデックスを綺麗にする
上述のように、array_filter
関数で取得した配列のインデックスは、除外された要素のインデックスが空き番になる仕様なので、インデックスを綺麗に連番にしたい場合は、array_values
などを使って、もう一度配列を作成する。
$array = [ 1, 2, 3, 4, 5, 6, 7 ];
$filter = array_filter($array, fn($value) => $value % 2 == 0); //偶数要素のみフィルタ
$new_array = array_values($filter); //インデックスの振り直し
dump($new_array);
実行結果は次のとおり。 array_values
によって、配列のインデックスが連番に振り直されているのが分かる。
^ array:3 [
0 => 2
1 => 4
2 => 6
]
スプレッド演算子でもOK
ちょっとモダンに書きたいのなら、スプレッド演算子を使ってもいいだろう。
$array = [ 1, 2, 3, 4, 5, 6, 7 ];
$filter = [...array_filter($array, fn($value) => $value % 2 == 0)]; //偶数要素のみフィルタ
dump($filter);
■ 実行結果
^ array:3 [
0 => 2
1 => 4
2 => 6
]
まとめ
array_filter
でズレた配列のインデックスを振り直す方法を紹介した。
これ知らないと、思わぬバグを生む仕様だし、この仕様って正直どうなんだろう。。。
0 件のコメント:
コメントを投稿