PHP Получить элемент с 5 наибольшим вхождением в массив - PullRequest
8 голосов
/ 01 февраля 2010

Что-то похожее на это: Получить элемент с наибольшим вхождением в массиве

Разница в том, что мне нужно более 1 результата, нужно всего 5 результатов. Таким образом, 5 самых высоких значений встречаются в (большом) массиве.

Спасибо!

Ответы [ 3 ]

13 голосов
/ 01 февраля 2010

PHP фактически предоставляет несколько удобных функций массива , которые вы можете использовать для достижения этой цели.

Пример:

<?php
$arr = array(
    'apple', 'apple', 'apple', 'apple', 'apple', 'apple',
    'orange', 'orange', 'orange',
    'banana', 'banana', 'banana', 'banana', 'banana', 
    'pear', 'pear', 'pear', 'pear', 'pear', 'pear', 'pear', 
    'grape', 'grape', 'grape', 'grape', 
    'melon', 'melon', 
    'etc'
);

$reduce = array_count_values($arr);
arsort($reduce);
var_dump(array_slice($reduce, 0, 5));

// Output:
array(5) {
    ["pear"]=>      int(7)
    ["apple"]=>     int(6)
    ["banana"]=>    int(5)
    ["grape"]=>     int(4)
    ["orange"]=>    int(3)
}

РЕДАКТИРОВАТЬ : Добавлен array_slice, как использовано в посте Аликс ниже.

7 голосов
/ 01 февраля 2010

Вот, пожалуйста:

<code>$yourArray = array(1, "hello", 1, "world", "hello", "world", "world");
$count = array_count_values($yourArray);

arsort($count);

$highest5 = array_slice($count, 0, 5);

echo '<pre>';
print_r($highest5);
echo '
';
1 голос
/ 01 февраля 2010

Создайте массив отсчетов и разместите их в обратном порядке:

$mode = array_count_values($input);
arsort($mode);
$i = 0;
foreach ($mode as $k => $v) {
  $i++;
  echo "$i. $k occurred $v times\n";
  if ($i == 5) {
    break;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...