SYNCERのロゴ
アイキャッチ画像

array_unique - 配列から重複した値を削除する

array_uniqueは、指定した配列から重複した値を取り除いた新しい配列を返す関数です。添字を含めてキーは保持されます。重複判定の比較は$a===$bで厳密に行なわれます。

構文

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

パラメータ

$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 ) ;
array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
}

先頭の要素が残る

返り値の配列には先頭側の要素が含まれます。例えば下記の場合、3つの要素の値が全て重複するので2つの要素は取り除かれます。残るのは一番先頭側にあるキー"c"の要素です。

<?php
/*** このコードは編集できます。 ***/

	$array = [
		"c" => 1 ,
		"a" => 1 ,
		"b" => 1 ,
	] ;

	$response = array_unique( $array ) ;

	var_dump( $response ) ;
array(1) {
  ["c"]=>
  int(1)
}

文字列に型変換した上での比較

デフォルトでは文字列に変換した後に$a===$bで比較されます。つまり、文字列の"1"と数値の1、真偽値のtrueは、いずれも文字列に型変換すると"1"になるため重複扱いとなります。

<?php
/*** このコードは編集できます。 ***/

	$array = [ 1, "1", true, "00001" ] ;

	$response = array_unique( $array ) ;

	var_dump( $response ) ;
array(2) {
  [0]=>
  int(1)
  [3]=>
  string(5) "00001"
}

比較方法の調整

第2引数で比較方法を調整できます。例えばSORT_NUMERICを指定すれば、文字列ではなく数値に型変換した上で$a===$bで判定をしてくれます。下記は先ほどと同じ配列です。"00001"は数値に型変換すると1になるので、今回は重複扱いとなりました。

<?php
/*** このコードは編集できます。 ***/

	$array = [ 1, "1", true, "00001" ] ;

	$response = array_unique( $array, SORT_NUMERIC ) ;

	var_dump( $response ) ;
array(1) {
  [0]=>
  int(1)
}
  • Twitterでシェア
  • Facebookでシェア
  • Google+でシェア
  • はてなブックマークでシェア
  • pocketに保存
  • LINEでシェア
更新履歴
2017年6月25日 (日)
コンテンツを公開しました。