LoginSignup
6
4

More than 5 years have passed since last update.

PHP関数:配列内に文字列の重複があるかどうか調べる関数

Last updated at Posted at 2015-04-30

配列内に重複する値があるかどうか調べる関数が無さそうだったので、作ってみました。

<?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():配列から重複した値を削除する
6
4
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4