2015-06-03 2 views
8

Таким образом, у меня есть этот JSON массив:PHP: Наиболее часто встречающееся значение в массиве

[0] => 238 
[1] => 7 
[2] => 86 
[3] => 79 
[4] => 55 
[5] => 92 
[6] => 55 
[7] => 7 
[8] => 254 
[9] => 9 
[10] => 75 
[11] => 238 
[12] => 89 
[13] => 238 

у меня будет больше значения фактического файла JSON. Но, взглянув на это, я вижу, что 238 и 55 повторяется больше, чем любое другое число. То, что я хочу сделать, это получить 5 самых повторяющихся значений в массиве и сохранить их в новом массиве PHP.

+0

FYI: Вы можете принять ответ, который помог вам больше всего, и решить вашу проблему (http://meta.stackexchange.com/q/5234) – Rizier123

+0

Что делать, если несколько значений одних и то же число вхождений, сделайте вы хотите любой, все или ничего. Например. '[5,4,2,6,7,3,1]' все имеют одно вхождение, которое вы бы выбрали 5? – salathe

ответ

18
$values = array_count_values($array); 
arsort($values); 
$popular = array_slice(array_keys($values), 0, 5, true); 
  • array_count_values() получает подсчет количества раз появляется каждый элемент в массиве
  • arsort() Сортирует массив по числу вхождений в обратном порядке
  • array_keys() получает фактическое значение, которое является массивом ключ в результатах от array_count_values()
  • array_slice() дает нам первые пять элементов результатов

Demo

$array = [1,2,3,4,238, 7, 86, 79, 55, 92, 55, 7, 254, 9, 75, 238, 89, 238]; 
$values = array_count_values($array); 
arsort($values); 
$popular = array_slice(array_keys($values), 0, 5, true); 

array (
    0 => 238, 
    1 => 55, 
    2 => 7, 
    3 => 4, 
    4 => 3, 
) 
+6

'$ this_answer =" beauty ";' –

5

Ключ использовать что-то вроде array_count_values() подсчитывать число вхождений каждого значения.

<?php 

$array = [238, 7, 86, 79, 55, 92, 55, 7, 254, 9, 75, 238, 89, 238]; 

// Get array of (value => count) pairs, sorted by descending count 
$counts = array_count_values($array); 
arsort($counts); 
// array(238 => 3, 55 => 2, 7 => 2, 75 => 1, 89 => 1, 9 => 1, ...) 

// An array with the first (top) 5 counts 
$top_with_count = array_slice($counts, 0, 5, true); 
// array(238 => 3, 55 => 2, 7 => 2, 75 => 1, 89 => 1) 

// An array with just the values 
$top = array_keys($top_with_count); 
// array(238, 55, 7, 75, 89) 

?> 
Смежные вопросы