array_unique - 配列から重複した値を削除する
array_uniqueは、指定した配列から重複した値を取り除いた新しい配列を返す関数です。添字を含めてキーは保持されます。重複判定の比較は$a===$bで厳密に行なわれます。
構文
パラメータ
$array
対象の配列。
$sort_flags
重複判定の方法を指定する。通常は(string)$a===(string)$bで文字列に変換した上で判定するが、その判定方法を定数で調整できる。
- SORT_REGULAR
- 型変換をしないで比較する。
- SORT_NUMERIC
- 数値に型変換をして比較する。
- SORT_STRING
- 文字列に型変換をして比較する。
- SORT_LOCALE_STRING
- ロケールに基づいた文字列に型変換をして比較する。
返り値
array
重複する要素を取り除いた新しい配列。
サンプルコード
<?php
$array = [ "a", "b", "c", "d", "a", "b" ] ;
$response = array_unique( $array ) ;
デモ
重複した要素を取り除く
重複する要素を取り除いた新しい配列を取得します。
<?php
/*** このコードは編集できます。 ***/
$array = [ "a", "b", "c", "d", "a", "b" ] ;
$response = array_unique( $array ) ;
var_dump( $response ) ;
先頭の要素が残る
返り値の配列には先頭側の要素が含まれます。例えば下記の場合、3つの要素の値が全て重複するので2つの要素は取り除かれます。残るのは一番先頭側にあるキー"c"の要素です。
<?php
/*** このコードは編集できます。 ***/
$array = [
"c" => 1 ,
"a" => 1 ,
"b" => 1 ,
] ;
$response = array_unique( $array ) ;
var_dump( $response ) ;
文字列に型変換した上での比較
デフォルトでは文字列に変換した後に$a===$bで比較されます。つまり、文字列の"1"と数値の1、真偽値のtrueは、いずれも文字列に型変換すると"1"になるため重複扱いとなります。
<?php
/*** このコードは編集できます。 ***/
$array = [ 1, "1", true, "00001" ] ;
$response = array_unique( $array ) ;
var_dump( $response ) ;
比較方法の調整
第2引数で比較方法を調整できます。例えばSORT_NUMERICを指定すれば、文字列ではなく数値に型変換した上で$a===$bで判定をしてくれます。下記は先ほどと同じ配列です。"00001"は数値に型変換すると1になるので、今回は重複扱いとなりました。
<?php
/*** このコードは編集できます。 ***/
$array = [ 1, "1", true, "00001" ] ;
$response = array_unique( $array, SORT_NUMERIC ) ;
var_dump( $response ) ;
参考
- PHP: array_unique
- PHPの公式リファレンス。
関連記事
- array_unshift
- 配列の先頭に要素を追加する。
- array_rand
- 配列から1つ以上の値をランダムに取得する。
- array_diff_assoc
- 配列の要素の差異を確認する。
- array_diff
- 配列の値の差異を確認する。