在PHP中获取数组中出现次数最高的5个元素

8

类似于这样:获取数组中出现次数最多的元素

不同之处在于我需要超过1个结果,总共需要5个结果。因此需要获取一个(大)数组中前5个最高频率的元素。

谢谢!

3个回答

14

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)
}

编辑: 在下面Alix的帖子中使用了array_slice函数,现已添加。


7

Here you go:

$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 '</pre>';

@Matt:谢谢,当我发布我的答案时,我没有意识到你已经在使用array_count_values()函数了。 - Alix Axel

1

构建计数数组并将它们倒序排列:

$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;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接