F.Ko-Jiの「一秒後は未来」

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

» PHP: array_merge – Manual

という小ネタでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など