PHP 配列内の値を重複チェック
PHPには配列の値の重複をチェックする関数が無いんですね。
重複を扱う関数はarray_uniqueがあるけどチェックじゃなくて削除してしまう。
重複しているモノだけを残し重複していないものは削除。という手法で以下関数で実現してみた。
/* 書式:array array_isunique(array $array){ 返り値:値の重複している連想配列。 引数が配列でない,もしくは重複する値が0の時はfalseを返す。 */ <?php function array_isunique($array){ if(!is_array($array)){ return false; } $arrayValue = array_count_values($array); //配列の値の数をカウントする $arraykey = array_keys($arrayValue,1); //重複していない値のキーを取り出す for($i=0;$i<count($arraykey);$i++){ unset($arrayValue[$arraykey[$i]]); //重複していない要素を削除 } if(count($arrayValue)!=0){ return $arrayValue; }else{ return false; } } /*別の方法 初期化された別の配列にarray_count_valuesでカウント1でないものを放り込んでいく*/ function array_isunique2($array){ if(!is_array($array)){ return false; } $new_arr = array(); $arrayValue = array_count_values($array); //配列の値の数をカウントする foreach($arrayValue as $key => $val){ if($val!=1){ $new_arr[$key] = $val; } } if(count($new_arr)!=0){ return $new_arr; }else{ return false; } } ?>
どうかなどうかな?
追記
ついったーでmullinKAIさんに別のやり方でアドバイスをもらいました。
それを参考に作ったのがarray_isunique2。
速度比較もしました。
実行結果
array_isunique => 21.174700021744
array_isunique2 => 22.457356929779
あまり実行時間に差はないですね。
使うのはどちらでも良さそうです。