假设我有一个n个元素(数字或单词)的数组,我想找到在数组中出现多次的所有元素。在绩效方面这样做最有效的方法是什么?
PS:我可以先对数组进行排序,但前提是它不会影响总体性能。 此外,虽然这主要是php,但我想知道可以在其他平台上实现的算法或逻辑。
答案 0 :(得分:4)
您可以使用array_count_values和array_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)));