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になっています。
確かに記述が間違っておりましたので修正しました。申し訳ございません。
ご指摘いただきありがとうございます。