【问题标题】:PHP: Most frequent value in arrayPHP:数组中最常见的值
【发布时间】:2015-08-18 01:23:31
【问题描述】:

所以我有这个 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 数组中。

【问题讨论】:

  • 仅供参考:您可以接受对您帮助最大并解决了您的问题的答案 (meta.stackexchange.com/q/5234)
  • 如果多个值共享相同的出现次数怎么办,你想要任何一个,全部还是一个都不想要。例如。 [5,4,2,6,7,3,1]都出现一次,你会选择哪5次?

标签: php arrays json repeat


【解决方案1】:
$values = array_count_values($array);
arsort($values);
$popular = array_slice(array_keys($values), 0, 5, true);

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

【讨论】:

  • $this_answer="beauty";
  • 如果你想检索那么只有最频繁的值你可以这样做$most_popular_value = key($values);
【解决方案2】:

关键是使用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)

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多