Как обнаружить повторяющиеся значения в массиве 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;