Php 如何查找数组中的重复元素?

Php 如何查找数组中的重复元素?,php,arrays,Php,Arrays,假设我有一个由n个元素(数字或单词)组成的数组,我想找到数组中多次出现的所有元素。在性能方面,最有效的方法是什么 PS:我可以先对数组进行排序,但前提是这不会对总体性能产生太大影响。 另外,虽然这主要是php,但我想知道一种算法或逻辑也可以在其他平台上实现。希望这能奏效 $lookup = array(); foreach($array as $v) { if (!isset($lookup[$v])) $lookup[$v] = false; else if (

假设我有一个由n个元素(数字或单词)组成的数组,我想找到数组中多次出现的所有元素。在性能方面,最有效的方法是什么

PS:我可以先对数组进行排序,但前提是这不会对总体性能产生太大影响。 另外,虽然这主要是php,但我想知道一种算法或逻辑也可以在其他平台上实现。

希望这能奏效

$lookup = array();
foreach($array as $v) {
    if (!isset($lookup[$v]))
        $lookup[$v] = false;
    else if ($lookup[$v] == false) {
        echo "Duplicate $v\n";
        $lookup[$v] = true;
    }
}
array_unique(array_diff($inputArray, array_unique($inputArray)));
您可以使用和

输出

Array
(
    [1] => 2
    [hello] => 2
)
PHP本身提供了一个函数

它比您需要的做得更多,但应该相当快,因为它是在..中编译的

然后,当然,您需要过滤掉值大于1的键的结果

编辑

如果您想要一个班轮:

$a = array('a','b','c','a','a','b','d','e');
array_keys(array_filter(array_count_values($a), create_function('$x', 'return $x>1;')));
// array (0 => 'a', 1 => 'b');

首先对数组进行排序是一个选项吗?性能取决于数组的长度,也可能取决于重复的频率。可能的重复可以添加
array\u filter
,例如:
array\u filter(array\u count\u values($array),function($val){return$val>1;})
无需为此创建函数,只需使用
create\u function()
创建一个可调用函数,该函数在使用后会自动销毁。。创建一个功能齐全的函数的唯一需要是,如果您需要多次调用该函数,则可以从代码的不同部分进行调用,等等。。(我怀念PHP中的Python lambda函数)
$a = array('a','b','c','a','a','b','d','e');
array_keys(array_filter(array_count_values($a), create_function('$x', 'return $x>1;')));
// array (0 => 'a', 1 => 'b');