Ben bilinmemektedir (aralığı) ... 127415157,31323794 gibi kimlikleri bir dizi var. PHP maksimum frekans kimliğini bulmak için en hızlı yolu nedir?
$array_ids = array()
// 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);
Kullanarak öneri array_search() Bu tamamen sıralama dizi gerekmez beri max(), ancak bu daha hızlı olabilir ve böylece [(2) {çalışacaktır ile kombine ]} zaman yerine O(n log n).
Aynı frekansta birden elemanlarının sorunu ele:
$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 ";
Bu çıktıya olacak
En sık değer / 5,3 olmasıdır
Ayrıca, bu array_search ve max üçlüsünü kullanarak biraz daha hızlıdır ...