如何检测PHP数组中的重复值?

mik*_*y_w 107 php arrays

我正在使用PHP中的一维数组.我想检测是否存在重复值,然后计算重复值的数量并输出结果.例如,给定以下数组:

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
   'pear', 'kiwi', 'kiwi', 'kiwi');
Run Code Online (Sandbox Code Playgroud)

我想打印:

apple (2)
orange
pear (2)
banana
kiwi (3)
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何建议?

谢谢.

麦克风

Sil*_*rom 227

您可以使用array_count_values函数

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

print_r(array_count_values($array));
Run Code Online (Sandbox Code Playgroud)

将输出

Array
(
   [apple] => 2
   [orange] => 1
   [pear] => 2
   etc...
)
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案不涵盖任何非整数和非字符串值,因此它会产生副作用。 (3认同)

小智 105

if(count(array_unique($array))<count($array))
{
    // Array has duplicates
}
else
{
    // Array does not have duplicates
}
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案不涵盖任何非整数和非字符串值,因此它会产生副作用。使用 array_unique($array, SORT_REGULAR) 强制 PHP 正常检查元素而不更改类型,但这是一个松散的比较。因此,具有相同内容的一个类的不同实例将是唯一的。 (2认同)

小智 34

function array_not_unique( $a = array() )
{
  return array_diff_key( $a , array_unique( $a ) );
}
Run Code Online (Sandbox Code Playgroud)

  • 这是仅返回重复值的唯一答案。 (2认同)
  • 扩展为仅提供重复值列表(我需要的):`return array_values(array_unique(array_diff_key($a, array_unique($a))));` (2认同)

小智 9

为了摆脱使用array_unique().检测是否有任何用途count(array_unique())并进行比较count($array).


Sim*_*rfe 7

您可以尝试将该数组转换为关联数组,其中水果作为键,出现次数为值.有点啰嗦,但看起来像:

$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 />";
}
Run Code Online (Sandbox Code Playgroud)