SYNCER

SYNCER

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()の挙動を確認して下さい。

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
}

参考リンク

  • PHP - 公式マニュアル。