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のリファレンスにあるように「入力配列の中にある数値添字要素の添字の数値は、 結果の配列ではゼロから始まる連続した数値に置き換えられます。」という仕様になっているから。
という小ネタでした。
コメントを残す