一、判断是否有重复值

  1. if (count($arr) != count(array_unique($arr))) {
  2. echo '该数组有重复值';
  3. }

注:array_unique() 函数移除数组中的重复的值,并返回结果数组。
当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。
返回的数组中键名不变。
array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。

二、获取重复的值(一维数组的值完全相等是重复;如果是二维数组,二维数组中的值必须完全相同才是重复)

  1. function getRepeat($arr) {
  2. // 获取去掉重复数据的数组
  3. $unique_arr = array_unique ( $arr );
  4. // 获取重复数据的数组
  5. $repeat_arr = array_diff_assoc ( $arr, $unique_arr );
  6. return $repeat_arr;
  7. }

三、二维数组局部键对应值数据判断是否重复

  1. /*
  2. 作用:根据二维数组中的部分键值判断二维数组中是否有重复值
  3. 参数:
  4. $arr —— 目标数组
  5. $keys —— 要进行判断的键值组合的数组
  6. 返回:重复的值
  7. 扩展:判断的键值
  8. */
  9. function getRepeat($arr,$keys) {
  10. $unique_arr = array();
  11. $repeat_arr = array();
  12. foreach ($arr as $k => $v) {
  13. $str = "";
  14. foreach ($keys as $a => $b) {
  15. $str .= "{$v[$b]},";
  16. }
  17. if( !in_array($str, $unique_arr) ){
  18. $unique_arr[] = $str;
  19. } else {
  20. $repeat_arr[] = $v;
  21. }
  22. }
  23. return $repeat_arr;
  24. }

举个例子:

  1. $arr1 = array("aaa","bbb","ccc","ddd","aaa","bbb");
  2. $arr2 = array("aaa","bbb","ccc","ddd","aaa");
  3. $arr3 = array("aaa","bbb","lll","ddd","aaa","bbb");
  4. $arr = array($arr1,$arr2,$arr3);
  5. $keys = array(0,1,2);
  6. var_dump(getRepeat($arr,$keys));
  7. 输出:
  8. D:\office\wamp64\www\test.php:46:
  9. array (size=1)
  10. 0 =>
  11. array (size=5)
  12. 0 => string 'aaa' (length=3)
  13. 1 => string 'bbb' (length=3)
  14. 2 => string 'ccc' (length=3)
  15. 3 => string 'ddd' (length=3)
  16. 4 => string 'aaa' (length=3)