たまにしか使わないから毎回忘れる配列の値が重複したときの削除方法について。
今回使用するのは、array_unique という関数です。
PHPのマニュアルページはこちらから。
PHP: array_unique – Manual
http://php.net/manual/ja/function.array-unique.php
こちらの関数は、重複を削除したい配列を引数として渡せば、重複を削除した後の配列を戻り値として返してくれます。
サンプルコードは下記のとおりです。
$array = array(1, 3, 5, 1, 2, 4, 3); // 重複削除 $unique = array_unique($array); // 実行結果:array(1, 3, 5, 2, 4)
ただし、この関数では、重複削除後もキーは保持されます。
なので、詳細に書くと結果が下記のようになっていることに注意してください。
$array = array(0 => 1, 1 => 3, 2 => 5, 3 => 1, 4 => 2, 5 => 4, 6 => 3); // 重複削除 $unique = array_unique($array); // 実行結果:array(0 => 1, // 1 => 3, // 2 => 5, // 4 => 2, // 5 => 4);
結果を単に foreach かなにかで処理するだけなら問題ないかと思いますが、キーをセットに扱う処理を行う場合などは、このままでは使えません。
その場合は、PHPの関数の array_values を使います。
こちらを使うと、数字が飛び飛びになったキーの番号を振り直すことができます。
使用方法はこちら。
$array = array(0 => 1, 1 => 3, 2 => 5, 3 => 1, 4 => 2, 5 => 4, 6 => 3); // 重複削除 $unique = array_unique($array); // キーの振り直し $result = array_values($unique); // 実行結果:array(0 => 1, // 1 => 3, // 2 => 5, // 3 => 2, // 4 => 4);
これでキーの番号が飛び飛びになる問題も解決できます。
ということで、配列のデータ重複を解消する方法でした。
意外と使う機会がある関数なので、覚えておいて損はないはず。
ついでに、下の方で紹介した配列のキーの振り直し方法についてもセットで覚えておくといいでしょう。