【问题标题】:PHP How to count same words in foreach loopPHP如何在foreach循环中计算相同的单词
【发布时间】:2015-03-10 01:16:40
【问题描述】:

我的 foreach 循环中有这个结果:

Tonsilitis
Tonsilitis
Laryngitis
Rhinosinusitis Akut
Rhinosinusitis Akut
Rhinosinusitis Akut
Common Cold
Common Cold
Common Cold
Rhinitis Alergi

这是我的脚本:

foreach ($results as $data) :
   $final = $data->nama_diagnosis . '<br>';
   echo $final;
endforeach;

我的问题是,我如何在循环中或循环外计算相同的单词。我可以这样做吗?请给我解决方案。因此,我想这样计算它们:

Tonsilitis = 2
Laryngitis = 1
Rhinosinusitis Akut = 3
Common Cold = 3
Rhinitis Alergi = 1

或者也许我可以过滤相同的词,所以我只得到最多的词,比如 Rhinosinusitis Akut 和 Common Cold。请帮我。 谢谢

【问题讨论】:

    标签: php arrays loops foreach count


    【解决方案1】:

    在 foreach 循环中将单词及其计数保存到数组中,然后进行另一个循环并写入数量。

    <?php
    
    $results = array(
        array('nama_diagnosis' => 'Tonsilitis'),
        array('nama_diagnosis' => 'Tonsilitis'),
        array('nama_diagnosis' => 'Laryngitis'),
        array('nama_diagnosis' => 'Rhinosinusitis Akut'),
        array('nama_diagnosis' => 'Rhinosinusitis Akut'),
        array('nama_diagnosis' => 'Rhinosinusitis Akut'),
        array('nama_diagnosis' => 'Common Cold'),
        array('nama_diagnosis' => 'Common Cold'),
        array('nama_diagnosis' => 'Common Cold'),
        array('nama_diagnosis' => 'Rhinitis Alergi')
    );
    
    $res = array();
    foreach ($results as $words) {  // changed $word to $words
        foreach ($words as $word) { // this foreach added
            if (isset($res[$word])) {
                $res[$word] += 1;
            } else {
                $res[$word] = 1;
            }
        } // end of nested foreach which was added
    }
    
    foreach ($res as $word => $count) {
        echo $word . ' (' . $count . ')<br>';
    }
    
    /*
        output:
    
        Tonsilitis (2)
        Laryngitis (1)
        Rhinosinusitis Akut (3)
        Common Cold (3)
        Rhinitis Alergi (1)
    */
    
    ?>
    

    【讨论】:

    • 这是我的数组..我可以转换它吗?数组 ( [0] => 数组 ( [nama_diagnosis] => 扁桃体炎 ) [1] => 数组 ( [nama_diagnosis] => 扁桃体炎 ) [2] => 数组 ( [nama_diagnosis] => 喉炎 ) [3] => 数组( [nama_diagnosis] => 鼻窦炎 Akut ) [4] => Array ( [nama_diagnosis] => 鼻窦炎 Akut ) [5] => Array ( [nama_diagnosis] => 鼻窦炎 Akut ) [6] => Array ( [nama_diagnosis] = > 普通感冒 ) [7] => 数组 ( [nama_diagnosis] => 普通感冒 ) [8] => 数组 ( [nama_diagnosis] => 普通感冒 ) [9] => 数组 ( [nama_diagnosis] => 过敏性鼻炎) )扁桃体炎 (2)
    • @RK26:我已经更新了我的答案,添加了嵌套的foreach(在第一个中,我将$word 更改为$words - foreach ($results as $words) {...})。
    • 我可以只显示一个计数最多的单词吗?有可能吗?
    • @RK26:见sort函数。
    • 当我使用 rsort($res) 时,顺序是正确的,但是单词也变成了数字
    【解决方案2】:

    您可以尝试这样的事情,使用 foreach 循环遍历数组并使用带有 isset 的三元运算符来安全地分配和递增每次出现:

    $count = array();
    foreach ($results as $result)
        isset($count[$data]) ? $count[$data]++ : $count[$data] = 1;
    

    Example

    【讨论】:

    • 看来 $data 是 OP 循环中的一个对象,并且必须使用:$data-&gt;nama_diagnosis 但除此之外,将 isset 与三元运算符结合使用非常棒! +1
    • @Rizier123 :this approach 也可以工作,这对我来说有点奇怪。
    【解决方案3】:

    这应该适合你:

    <?php
    
        $results = array("Tonsilitis", "Tonsilitis", "Laryngitis", "Rhinosinusitis Akut", "Rhinosinusitis Akut", "Rhinosinusitis Akut", "Common Cold", "Common Cold", "Common Cold", "Rhinitis Alergi");
        $counter = array();
    
    
        foreach ($results as $data):
            if(in_array($data->nama_diagnosis, array_flip($counter)))
                $counter[$data->nama_diagnosis]++;
            else
                $counter[$data->nama_diagnosis] = 1;
        endforeach;
    
        foreach ($counter as $key => $data)
           echo $key . " = " . $data . "<br />"; 
    
    ?>
    

    输出:

    Tonsilitis = 2
    Laryngitis = 1
    Rhinosinusitis Akut = 3
    Common Cold = 3
    Rhinitis Alergi = 1
    

    【讨论】:

      【解决方案4】:

      试试 -

      $counts = array();
      foreach ($results as $data) :
         $final = $data->nama_diagnosis . '<br>';
         if (array_key_exists($data->nama_diagnosis, $counts)) {
              $counts[$data->nama_diagnosis] += 1;
         } else {
              $count[$data->nama_diagnosis] = 1;
         }
      endforeach;
      
      foreach ($counts as $key => $val) { 
          echo $key.' = '.$val;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-29
        • 2016-12-24
        • 2018-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多