Ответ 1
это будет ~ 100 раз быстрее, чем array_diff
$dups = array();
foreach(array_count_values($arr) as $val => $c)
if($c > 1) $dups[] = $val;
Я хотел бы проверить, есть ли у моего массива какие-либо дубликаты и возвращать дублированные значения в массиве. Я хочу, чтобы это было максимально эффективным.
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
Также начальный массив всегда имеет 5 позиций длиной
это будет ~ 100 раз быстрее, чем array_diff
$dups = array();
foreach(array_count_values($arr) as $val => $c)
if($c > 1) $dups[] = $val;
Вы можете получить разницу между исходным массивом и копией без дубликатов, используя array_unique
и array_diff_assoc
:
array_diff_assoc($arr, array_unique($arr))
function array_dup($ar){
return array_unique(array_diff_assoc($ar,array_unique($ar)));
}
Должен сделать трюк.
Вы можете сделать следующее:
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);
Вывод:
duplicate = 2
function returndup($array)
{
$results = array();
$duplicates = array();
foreach ($array as $item) {
if (in_array($item, $results)) {
$duplicates[] = $item;
}
$results[] = $item;
}
return $duplicates;
}
в дополнение к gumbo-ответу:
function returndup($arr)
{
return array_diff_key($arr, array_unique($arr));
}
$someValues = [1, 2, 2, 3, 5, 1, 5, 6];
$duplicate = [];
for ($i=0; $i < count($someValues); $i++) {
if (in_array($someValues[$i], $someValues)) {
$duplicate[] = $someValues[$i];
}
}
print_r($duplicate);
Вывод: Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 3 [4] => 5 [5] => 1 [6] => 5 [7] => 6 )
Я нашел другой способ вернуть дубликаты в массиве
function printRepeating($arr, $size)
{
$i;
$j;
for($i = 0; $i < $size; $i++)
for($j = $i + 1; $j < $size; $j++)
if($arr[$i] == $arr[$j])
echo $arr[$i], " ";
}
printRepeating($array, sizeof($array,0);