PHPのarray_uniqueで歯抜けになった配列のインデックスを詰める方法
PHPの配列で重複した値を取り除きたいときに array_unique を使いますが、array_unique は配列の添字(インデックス)を維持してしまいます。
$places = array( '渋谷', '新宿', '新宿', '中野', '渋谷', '池袋', );
たとえばこの配列に array_unique を適用すると、
$places = array_unique($places); var_dump($places); // 出力 array(4) { [0]=> string(6) "渋谷" [1]=> string(6) "新宿" [3]=> string(6) "中野" [5]=> string(6) "池袋" }
こんな風にインデックスが 0, 1, 3, 5 と歯抜け状態になってしまいます。で、この配列のインデックスを 0, 1, 2, 3 としたい時どうするかというと、array_merge を使うと一発です。
$places = array_merge(array_unique($places)); var_dump($places); // 出力 array(4) { [0]=> string(6) "渋谷" [1]=> string(6) "新宿" [2]=> string(6) "中野" [3]=> string(6) "池袋" }
なぜこうなるかというと、array_mergeのリファレンスにあるように「入力配列の中にある数値添字要素の添字の数値は、 結果の配列ではゼロから始まる連続した数値に置き換えられます。」という仕様になっているから。
という小ネタでした。
コメントを残す