2010-04-06 3 views
3

Допустим, у меня есть простой массив 1D с 10-20 вводами. Некоторые будут дублироваться, как бы я узнал, какая запись используется больше всего? как ...PHP: Как найти наиболее используемый ключ массива?

$code = Array("test" , "cat" , "test" , "this", "that", "then"); 

Как бы показать «тест» как наиболее часто используемый элемент?

ответ

9
$code = Array("test" , "cat" , "test" , "this", "that", "then"); 

function array_most_common($input) { 
    $counted = array_count_values($input); 
    arsort($counted); 
    return(key($counted));  
} 

echo '<pre>'; 
print_r(array_most_common($code)); 
+1

Сортировка весь массив просто найти максимум кажется немного расточительно. – Thomas

+2

@ У Томаса есть очевидная, более быстрая альтернатива, видя, что массив не сортируется заранее? Не спорить, просто спрашивать. –

+2

@Thomas Sort будет быстрее, чем линейная петля над массивом. Если вы хотите, вы всегда можете удалить arsort() и сделать цикл for, чтобы определить, какой из них имеет наибольший счет. –

5

Вы можете получить подсчет количества вхождений каждого значения с помощью 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" 
} 
*/