如何检测PHP数组中的重复值?
我在PHP中使用一维数组。 我想检测重复值的存在,然后计算重复值的数量,并把结果。 例如,给定以下数组:
$array = array('apple', 'orange', 'pear', 'banana', 'apple', 'pear', 'kiwi', 'kiwi', 'kiwi');
我想打印:
apple (2) orange pear (2) banana kiwi (3)
有关如何解决这个问题的任何build议?
谢谢。
麦克风
使用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... )
if(count(array_unique($array))<count($array)) { // Array has duplicates } else { // Array does not have duplicates }
function array_not_unique( $a = array() ) { return array_diff_key( $a , array_unique( $a ) ); }
摆脱使用array_unique()
。 检测是否有任何使用count(array_unique())
并与count($array)
进行比较。
您可以尝试将该数组转换为关联数组,其中水果作为关键字,出现次数作为值。 位啰嗦,但它看起来像:
$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 />"; }
<?php $arr = array(1, 2, 3, 2, 5, 6, 7); print_r(array_count_values($arr)); ?>
将它们填入map
(伪代码)
map[string -> int] $m foreach($word in $array) { if(!$m.contains($word)) $m[$word] = 0; $m[$word] += 1; }
也许像这样(未经testing的代码,但应该给你一个想法)?
$new = array(); foreach ($array as $value) { if (isset($new[$value])) $new[$value]++; else $new[$value] = 1; }
然后你会得到一个新的数组作为键值,它们的值是它们在原始数组中存在的次数。
$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;