我在PHP中使用一维数组。我想检测是否存在重复值,然后计算重复值的数量并输出结果。例如,给定以下数组:
$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');
我想打印:
apple (2)
orange
pear (2)
banana
kiwi (3)
有关如何解决此问题的任何建议吗?
感谢。
麦克
答案 0 :(得分:217)
您可以使用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...
)
答案 1 :(得分:100)
if(count(array_unique($array))<count($array))
{
// Array has duplicates
}
else
{
// Array does not have duplicates
}
答案 2 :(得分:32)
function array_not_unique( $a = array() )
{
return array_diff_key( $a , array_unique( $a ) );
}
答案 3 :(得分:8)
要摆脱使用array_unique()
。检测是否有任何使用count(array_unique())
并与count($array)
进行比较。
答案 4 :(得分:6)
您可以尝试将该数组转换为关联数组,其中水果为关键字,出现次数为值。有点啰嗦,但看起来像:
$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 />";
}
答案 5 :(得分:3)
<?php
$arr = array(1, 2, 3, 2, 5, 6, 7);
print_r(array_count_values($arr));
?>
答案 6 :(得分:2)
将它们填入map
(伪代码)
map[string -> int] $m
foreach($word in $array)
{
if(!$m.contains($word))
$m[$word] = 0;
$m[$word] += 1;
}
答案 7 :(得分:2)
也许是这样的(未经测试的代码,但应该给你一个想法)?
$new = array();
foreach ($array as $value)
{
if (isset($new[$value]))
$new[$value]++;
else
$new[$value] = 1;
}
然后你会得到一个新的数组,其值为键,它们的值是它们在原始数组中存在的次数。
答案 8 :(得分:0)
$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;
答案 9 :(得分:0)
我找不到我要找的答案,所以我写了这个函数。这将使一个数组只包含两个数组之间的重复,但不会打印一个元素重复的次数,所以它不是直接回答问题,但我希望它能帮助我的情况。< / p>
function findDuplicates($array1,$array2)
{
$combined = array_merge($array1,$array2);
$counted = array_count_values($combined);
$dupes = [];
$keys = array_keys($counted);
foreach ($keys as $key)
{
if ($counted[$key] > 1)
{$dupes[] = $key;}
}
sort($dupes);
return $dupes;
}
$array1 = [1,2,3,4,5];
$array2 = [4,5,6,7,8];
$dupes = findDuplicates($array1,$array2);
print_r($dupes);
输出:
Array
(
[0] => 4
[1] => 5
)
答案 10 :(得分:0)
一个简单的方法:
$array = array_values(array_unique($array, SORT_REGULAR));