array_unique() - 配列から重複した値を削除する
公開日:
array_unique
は、指定した配列から重複した値を取り除いた新しい配列を返す関数です。添字を含めてキーは保持されます。重複判定の比較は$a===$b
で厳密に行なわれます。
構文
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )
パラメータ
$array
対象の配列。
$sort_flags
初期値: SORT_STRING
重複判定の方法を指定する。通常は(string)$a===(string)$b
で文字列に変換した上で判定するが、その判定方法を定数で調整できる。
- SORT_REGULAR
- 型変換をしないで比較する。
- SORT_NUMERIC
- 数値に型変換をして比較する。
- SORT_STRING
- 文字列に型変換をして比較する。
- SORT_LOCALE_STRING
- ロケールに基づいた文字列に型変換をして比較する。
返り値
array
重複する要素を取り除いた新しい配列。
サンプルコード
重複した要素を取り除く
重複する要素を取り除いた新しい配列を取得します。
php
<?php
// 配列
$queue = [ "a", "b", "c", "d", "a", "b" ] ;
// 実行
$result = array_unique( $queue ) ;
// 返り値
var_dump( $result ) ;
結果 (出力内容) - PHP7.0.21
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
}
先頭の要素が残る
返り値の配列には先頭側の要素が含まれます。例えば下記の場合、3つの要素の値が全て重複するので2つの要素は取り除かれます。残るのは一番先頭側にあるキー"c"
の要素です。
php
<?php
// 配列
$queue = [
"c" => 1 ,
"a" => 1 ,
"b" => 1 ,
] ;
// 実行
$result = array_unique( $queue ) ;
// 返り値
var_dump( $result ) ;
結果 (出力内容) - PHP7.0.21
array(1) {
["c"]=>
int(1)
}
文字列に型変換した上での比較
デフォルトでは文字列に変換した後に$a===$b
で比較されます。つまり、文字列の"1"
と数値の1
、真偽値のtrue
は、いずれも文字列に型変換すると"1"
になるため重複扱いとなります。
php
<?php
// 配列
$queue = [ 1, "1", true, "00001" ] ;
// 実行
$result = array_unique( $queue ) ;
// 返り値
var_dump( $result ) ;
結果 (出力内容) - PHP7.0.21
array(2) {
[0]=>
int(1)
[3]=>
string(5) "00001"
}
比較方法の調整
第2引数で比較方法を調整できます。例えばSORT_NUMERIC
を指定すれば、文字列ではなく数値に型変換した上で$a===$b
で判定をしてくれます。下記は先ほどと同じ配列です。"00001"
は数値に型変換すると1
になるので、今回は重複扱いとなりました。
php
<?php
// 配列
$queue = [ 1, "1", true, "00001" ] ;
// 実行
$result = array_unique( $queue, SORT_NUMERIC ) ;
// 返り値
var_dump( $result ) ;
結果 (出力内容) - PHP7.0.21
array(1) {
[0]=>
int(1)
}
サンドボックス
ソースコードを編集してarray_unique()
の挙動を確認して下さい。
参考リンク
- PHP - 公式マニュアル。