【问题标题】:My loop is doubling the results when match is found找到匹配项时,我的循环使结果加倍
【发布时间】:2013-04-12 06:50:05
【问题描述】:

我有几个月的数据库。我正在使用以下内容对相似的月份进行分组:

$Mydates = array();
while(........)
{
    $date = $row['date'];
    $Mydates[$date] = (isset($Mydates[$date])) ? $Mydates[$date] + 1: 1;
}

我的表包含 4 个数据,分别是 1 月 3 日和 2 月 1 日。现在,这些信息正在通过一个包含一年中月份的数组运行。这是我目前所拥有的:

   $months = array("Jan","Feb","Mar",etc........);
    foreach($months as $month)
    {
      foreach($Mydates as $Mydate => $Number)
      {
      if($month == $Mydate)
         {
         echo $month." (".$Number.")<br />";
         }else{
         echo $month."<br />";
         }
      }
    }

现在,当只有 Jan 时,这可以正常工作。现在我又增加了一个月,结果显示如下:

一月(3) 一月(3) 二月(1) 二月(1) 三月 三月 ETC..... 等等……

我怎样才能让它像这样只显示一次:

一月(3) 二月(1) 三月 等等……

现在我注意到,添加的月份越多,重复的次数就越多。有人可以看看这个并告诉我我哪里出错了吗?

【问题讨论】:

  • 这是因为你的 foreachloop.在找到正确的匹配项后,您需要摆脱它。
  • 您想将一整个月的所有数字相加吗?
  • 我同意 Daryl 的观点,但如果能提供更多信息会很好。
  • 用 COUNT 和 GROUP BY 编写 SQL 查询不是更有意义吗? stackoverflow.com/questions/2866764/… 之类的东西?
  • @MikePurcell 我已经这样做了,并且大部分情况下该部分工作正常。我的问题是当我试图匹配它不断重复结果的月份列表时。

标签: php loops


【解决方案1】:

看来,$Mydates 已按月汇总并可访问。去掉内循环,看看$Mydates中是否有对应的月份

foreach($months as $month) {
    if(isset($Mydates[$month])) {
        echo $month." (".$Mydates[$month].")<br />";
    } else {
        echo $month."<br />";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    相关资源
    最近更新 更多