配列内に重複する値があるかどうか調べる関数が無さそうだったので、作ってみました。
<?php
/**
* 配列内に重複する値があるかどうか調べる(文字列、数値のみ対応)
*
* @param array $array 配列(配列のKeyはチェックされない)
* @return bool true:重複あり、false:重複なし
*/
function array_same_values($array) {
foreach (array_count_values($array) as $count) {
if ($count > 1) {
return true;
}
}
return false;
}
/* テスト - 重複なし */
$array1 = array('foo', 'bar', 'baz', 'qux');
var_dump(array_same_values($array1)); //false
/* テスト - 重複あり */
$array2 = array('foo', 'bar', 'baz', 'foo');
var_dump(array_same_values($array2)); // true
/* テスト - 重複あり('123'と123は重複とみなされる) */
$array3 = array('foo', 'bar', 'baz', 'qux', '123', 123);
var_dump(array_same_values($array3)); // true
こんな感じですかね。
関数名は、PHPの関数一覧を見ながら似たような感じの名前にしてみました。
改良版(2015/05/01 コメントより)
コメントでいただいたコードです。これでもいけるそうです!
/**
* 配列内に重複する値があるかどうか調べる(文字列、数値のみ対応)
*
* @param array $array 配列(配列のKeyはチェックされない)
* @return bool true:重複あり、false:重複なし
*/
function array_same_values($array) {
return array_unique($array) !== $array;
}
PHPなので当然かもしれませんが、例えば数字の"1"
と数値の1
は基本的に同じとみなされるようなので注意です。
関数リンク
- array_count_values():配列の要素の出現回数を値とした配列を生成して返します。(文字列、数値のみ)
- array_unique():配列から重複した値を削除する