如何在数组中找到重复元素?

时间:2011-07-28 11:38:59

标签: php arrays

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

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

4 个答案:

答案 0 :(得分:4)

您可以使用array_count_valuesarray_filter

$array = array(1, "hello", 1, "world", "hello");
$new=array_filter(array_count_values($array),'custom_filter');
print_r($new);
function custom_filter($val)
{
  return $val > 1; 
}

输出

Array
(
    [1] => 2
    [hello] => 2
)

答案 1 :(得分:1)

PHP本身提供了array_count_values()功能。

它比你需要的更多,但应该非常快,因为它是编译进来的。

然后,当然,您需要过滤掉值为>的键的结果。 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');

答案 2 :(得分:0)

$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;
    }
}

答案 3 :(得分:0)

希望这会起作用

array_unique(array_diff($inputArray, array_unique($inputArray)));