检查并返回重复数组php

NVG*_*NVG 24 php arrays duplicates

我想检查我的数组是否有任何重复项并返回数组中的重复值.我希望这个尽可能高效.

Example :$array = array(1,2,2,4,5)
function returndup($array) should return 2 ;

if array is array(1,2,1,2,5);
it should return an array with 1,2
Run Code Online (Sandbox Code Playgroud)

初始数组总是长5个位置

use*_*291 67

这将比array_diff快约100倍

$dups = array();
foreach(array_count_values($arr) as $val => $c)
    if($c > 1) $dups[] = $val;
Run Code Online (Sandbox Code Playgroud)

  • 有一个非常快的benckmark和我,你的方法只出现两倍于JAL的array_diff方法,而不是快100倍. (11认同)
  • 当心。不适用于字符串。 (2认同)
  • 请注意,“array_count_values”仅接受字符串和整数值,因此如果您的输入数组可能包含其他类型的值,那么这不是一个好的选择。但它确实适用于问题中的示例,其中看起来情况确实只是一个整数数组。 (2认同)

Gum*_*mbo 18

你可以使用array_unique和得到原始数组和没有重复的副​​本的区别 array_diff_assoc:

array_diff_assoc($arr, array_unique($arr))
Run Code Online (Sandbox Code Playgroud)


JAL*_*JAL 6

function array_dup($ar){
   return array_unique(array_diff_assoc($ar,array_unique($ar)));
}
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.


小智 5

你可以这样做:

function showDups($array)
{
  $array_temp = array();

   foreach($array as $val)
   {
     if (!in_array($val, $array_temp))
     {
       $array_temp[] = $val;
     }
     else
     {
       echo 'duplicate = ' . $val . '<br />';
     }
   }
}


$array = array(1,2,2,4,5);
showDups($array);
Run Code Online (Sandbox Code Playgroud)

输出:

duplicate = 2
Run Code Online (Sandbox Code Playgroud)