【问题标题】:Finding the values in an array that have the most occurrences查找数组中出现次数最多的值
【发布时间】:2011-04-29 19:00:27
【问题描述】:

我有一组取自 MySQL 数据库的标签。显然,这些标签是字符串并且存储在一个数组中,数组中的一个元素存储每个标签。为了构建我的标签云,我希望能够计算每个标签的出现次数以找到最常见的标签。

例如,如果我有下表...

标签1
标签1
你好
再见
牛
晚礼服
标签1
晚礼服
晚礼服
标签1
...
等

... 最常出现的标签是“tag1” 我想做的是计算该标签在数组中出现的次数。 Max() 在这里没有帮助,因为它只喜欢数值。

【问题讨论】:

    标签: php arrays count


    【解决方案1】:

    使用数组计数值

    <?php
    $array = array(1, "hello", 1, "world", "hello");
    print_r(array_count_values($array));
    ?>
    
    
    Array
    (
        [1] => 2
        [hello] => 2
        [world] => 1
    )
    

    http://php.net/manual/en/function.array-count-values.php

    如果您不想要区分大小写的版本,请使用:

    $ar = array_count_values(array_map('strtolower', $ar));
    

    【讨论】:

      【解决方案2】:

      如果你的数组是这样的

      $array = array('tag1','tag1','hi','bye','gnu','tux','tag1','tux','tux','tag1');
      
      $arrayCounting = array_count_values($array));
      

      会给你一个这样的数组来使用

      Array
      (
          [tag1] => 4
          [hi] => 1
          [bye] => 1
          [gnu] => 1
          [tux] => 3
      )
      

      【讨论】:

      • 如果不知道数组元素是什么怎么办?
      • 我不确定你的意思stackoverflow.com/users/5294439/michael-ozoemena 这种技术不限于知道值
      • 算了。使用此方法如何获取数组中出现次数最多的元素的内容。考虑到我不知道“tag1”的存在,我怎样才能让它输出“tag1”。
      【解决方案3】:

      我怀疑您可以让您的数据库为您完成所有繁重的工作。听起来你得到了一系列标签,可能是这样的

      SELECT tag FROM mytable;
      

      但你可以这样做

      SELECT tag,count(*) AS occurrences FROM mytable 
      GROUP BY tag
      ORDER BY occurences;
      

      你好,标签列表及其频率!

      【讨论】:

      • 实际上标签以 CSV 列表的形式存储在数据库中,但是我确实得到了它们的数组 - explode() 非常方便! (PHP)
      • 另外,我使用了我标记为正确的解决方案,但是到了有一个好的重写巨星的时候,我一定会使用这个方法 - 谢谢。
      猜你喜欢
      • 2019-10-27
      • 2017-06-27
      • 1970-01-01
      • 2011-04-17
      • 2013-07-14
      • 2021-02-01
      • 2021-10-28
      • 1970-01-01
      • 2018-09-23
      相关资源
      最近更新 更多