Вы можете получить подсчет количества вхождений каждого значения с помощью array_count_values.
$code = array("test" , "cat" , "cat", "test" , "this", "that", "then");
$counts = array_count_values($code);
var_dump($counts);
/*
array(5) {
["test"]=>
int(2)
["cat"]=>
int(2)
["this"]=>
int(1)
["that"]=>
int(1)
["then"]=>
int(1)
}
*/
Чтобы получить наиболее часто встречающееся значение, вы можете вызвать max на массиве, а затем получить доступ (первое) значения с array_search.
$code = array("test" , "cat" , "cat", "test" , "this", "that", "then");
$counts = array_count_values($code);
$max = max($counts);
$top = array_search($max, $counts);
var_dump($max, $top);
/*
int(2)
string(4) "test"
*/
Если вы хотите, чтобы удовлетворить нескольких наиболее частых значений, то что-то вроде следующего будет работать:
$code = array("test" , "cat" , "cat", "test" , "this", "that", "then");
$counts = array_count_values($code);
$max = max($counts);
$top = array_keys($counts, $max);
var_dump($max, $top);
/*
int(2)
array(2) {
[0]=>
string(4) "test"
[1]=>
string(3) "cat"
}
*/
Сортировка весь массив просто найти максимум кажется немного расточительно. – Thomas
@ У Томаса есть очевидная, более быстрая альтернатива, видя, что массив не сортируется заранее? Не спорить, просто спрашивать. –
@Thomas Sort будет быстрее, чем линейная петля над массивом. Если вы хотите, вы всегда можете удалить arsort() и сделать цикл for, чтобы определить, какой из них имеет наибольший счет. –