PHP: наиболее частое значение в массиве

Итак, у меня есть этот массив JSON:

[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.

11

Решение

$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() дает нам первые пять элементов результатов

демонстрация

$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,
)
30

Другие решения

Ключ должен использовать что-то вроде 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)

?>
5

По вопросам рекламы [email protected]