Как обнаружить повторяющиеся значения в массиве PHP?

Я работаю с одномерным массивом в PHP. Я хотел бы обнаружить наличие повторяющихся значений, затем подсчитать количество повторяющихся значений и вывести результаты. Например, учитывая следующий массив:

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
   'pear', 'kiwi', 'kiwi', 'kiwi');

Я бы хотел напечатать:

apple (2)
orange
pear (2)
banana
kiwi (3)

Любые советы о том, как подойти к этой проблеме?

Спасибо.

Mike

Ответ 1

использовать array_count_values ​​

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');

print_r(array_count_values($array));

выводит

Array
(
   [apple] => 2
   [orange] => 1
   [pear] => 2
   etc...
)

Ответ 2

if(count(array_unique($array))<count($array))
{
    // Array has duplicates
}
else
{
    // Array does not have duplicates
}

Ответ 3

function array_not_unique( $a = array() )
{
  return array_diff_key( $a , array_unique( $a ) );
}

Ответ 4

Чтобы избавиться от использования array_unique(). Чтобы определить, использовать ли count(array_unique()) и сравнить с count($array).

Ответ 5

Вы можете попробовать превратить этот массив в ассоциативный массив с фруктами в виде ключей и количеством вхождений в качестве значений. Бит длинный, но выглядит так:

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
   'pear', 'kiwi', 'kiwi', 'kiwi');
$new_array = array();
foreach ($array as $key => $value) {
    if(isset($new_array[$value]))
        $new_array[$value] += 1;
    else
        $new_array[$value] = 1;
}
foreach ($new_array as $fruit => $n) {
    echo $fruit;
    if($n > 1)
        echo "($n)";
    echo "<br />";
}

Ответ 6

<?php

$arr = array(1, 2, 3, 2, 5, 6, 7);

print_r(array_count_values($arr));

?>

Ответ 7

Заполните их в map (псевдокод)

map[string -> int] $m
foreach($word in $array)
{
    if(!$m.contains($word))
        $m[$word] = 0;

    $m[$word] += 1;
}

Ответ 8

Возможно, что-то вроде этого (непроверенный код, но должен дать вам представление)?

$new = array();

foreach ($array as $value)
{
    if (isset($new[$value]))
        $new[$value]++;
    else
        $new[$value] = 1;
}

Затем вы получите новый массив со значениями в качестве ключей, а их значение - количество раз, когда они существовали в исходном массиве.

Ответ 9

$count = 0;
$output ='';
$ischeckedvalueArray = array();
for ($i=0; $i < sizeof($array); $i++) {
    $eachArrayValue = $array[$i];
    if(! in_array($eachArrayValue, $ischeckedvalueArray)) {
        for( $j=$i; $j < sizeof($array); $j++) {
            if ($array[$j] === $eachArrayValue) {
                $count++;
            }
        }
        $ischeckedvalueArray[] = $eachArrayValue;
        $output .= $eachArrayValue. " Repated ". $count."<br/>";
        $count = 0;
    }

}

echo $output;