【问题标题】:how to count values from an array and show value only once in a foreach loop如何计算数组中的值并在 foreach 循环中仅显示一次值
【发布时间】:2020-09-24 13:15:48
【问题描述】:

我正在努力解决这个问题: 我有一个以月份为值的数组。数组中有 3 个值(月):090904。所以 9 月 (09) 月有 2 次,4 月 (04) 月有 1 次。

现在我想每个月只输出一次,以及该月出现在它后面的次数。 所以我的输出应该是这样的

04 1 // april 1 time
09 2 // september 2 times

我现在有了这个 foreach 循环:

$months = array('04','09','09');
foreach($months as $month) {                
    $archive_months = array('01','02','03','04','05','06','07','08','09','10','11','12'); 
    $counts = array_count_values($archive_months);
    echo $month.' '.$counts[$month].'<br />';

如果我使用foreach(array_unique($months) as $month) {,则月份 9 月 (09) 仅出现一次,但数字是 1 而不是 2。

输出:

04 1
09 1

它应该是:

04 1
09 2

【问题讨论】:

  • 你数一下09archive_months的次数 => 1

标签: php arrays foreach counting


【解决方案1】:

只计算月份的值而不是archive_months

<?php

$months = array('04','09','09');
 
$counts = array_count_values($months);
var_dump($counts);

输出:

array(2) {
  ["04"]=>
  int(1)
  ["09"]=>
  int(2)
}

【讨论】:

    【解决方案2】:

    你不是指$months,而是$archive_months

    arry_count_values 已经在做你需要的事情了。不需要 for 循环。

    $months = array('04','09','09');
    print_r(array_count_values($months));
    

    【讨论】:

      【解决方案3】:

      就像 Ôrel 已经提到的:

      $months = array('04','09','09'); 
      $counts = array_count_values($months);
      
      // your foreach:
      foreach($counts as $key => $val) {
          echo $key.' '.$val.'<br />';
      }
      
      

      输出将类似于:

      09 2
      04 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2013-08-03
        相关资源
        最近更新 更多