在PHP中查找最大频率元素的最快方法

时间:2010-05-05 09:42:00

标签: php

我有一系列ID,如127415157,31323794 ...(范围未知)。在PHP中找到最大频率ID的最快方法是什么?

$array_ids = array()

4 个答案:

答案 0 :(得分:7)

// Gives us an associative array of id=>count mappings,
$counts = array_count_values($array_ids);
// and sorts it from largest to smallest count
arsort($counts);

// Gets the first key after sorting, which is the id with the largest count
$max_freq_id = key($counts);

使用array_search()max()结合使用的建议可能比此更快,因为它不需要对数组进行完全排序,因此会在O(n)时间内运行而不是O(n log n)

答案 1 :(得分:6)

$a = array(1, 2, 3, 4, 3, 3, 4, 4, 1, 3);
$r = array_count_values($a);
$k = array_search(max($r), $r);
echo "most frequent value is $k";

答案 2 :(得分:2)

解决具有相同频率的多个元素的问题:

$values = array(1, 1, 3, 3, 3, 3, 4, 5, 5, 5, 5, 6); 
$freq   = array_count_values($values);
arsort($freq);
$max = $val = key($freq); 
while(next($freq) && current($freq) == $freq[$max]){
    $val .= ','.key($freq);
}

echo " most frequent value is/are $val ";

这将输出

  

最常见的值是5,3

此外,它比使用array_search和max combo快一点......

答案 3 :(得分:0)

尝试 max

$max = max($array_ids);