PHPの配列で重複した値を削除するarray_unique()のご紹介です。
削除するとキーが飛び飛びになるため、キーを連番で振り直す方法も併せてご紹介しています。
array_unique関数で重複した値を削除
|
1 2 |
$arr = array(1,2,3,2,1,4,5,3); print_r(array_unique($arr)); |
Array
(
[0] => 1
[1] => 2
[2] => 3
[5] => 4
[6] => 5
)
array_unique()で重複した値が削除されました。
型が違っても同じ値なら重複は削除される
以下のように数値型を文字列型で同じ値があったとしても、重複した文字は削除されます。
|
1 2 |
$arr = array(1,2,3,"2","1",4,5,1,3); print_r(array_unique($arr)); |
Array
(
[0] => 1
[1] => 2
[2] => 3
[5] => 4
[6] => 5
)
変数$arrの配列には同じ文字でも型が違うものが混じっています。
- 数値型の
2と文字列型の"2" - 数値型の
1と文字列型の"1"
関数によっては型が違うと、別の文字として判定する場合もありますが、array_unique()は同じものとして重複扱いとなります。
array_unique() はまず文字列として値をソートし、
上記マニュアルにもあるように、一旦文字列型に値を変換して、型が揃ったところで重複チェックするためです。
型を意識せずにコーディングできるPHPらしい動作ですね。
配列のキーが[0][1][2][5][6]と削除された部分がなくなり、飛び飛びとなったため、キーを連番で振りなおしてみましょう。
array_values関数でキーを振り直す
|
1 2 3 |
$arr = array(1,2,3,2,1,4,5,3); $val = array_unique($arr); print_r(array_values($val)); |
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
array_unique()で重複を削除した配列を、変数$valに格納します。
その配列をarray_values()でキーを0から始まる連番で振り直しました。

表題などがarray_uniqeになっています。
確かに記述が間違っておりましたので修正しました。申し訳ございません。
ご指摘いただきありがとうございます。