php foreach print <br/>标签,如果日期不同

时间:2018-03-30 12:35:25

标签: php loops

我希望我能够清楚。 我正在从数据库中检索日期(仅限日期)。我有一个循环,我想打印这样的东西:

1 april
1 april

2 april

3 april
3 april
3 april

等...

所以:同一天=没有<br>代码,不同日期打印<br>

我的实际代码:

$prec;
                      foreach ($list as $rs) {
                          $day = date("d", strtotime($rs['date']))." ";
                          if ($day === $prec) {
                              $space = "";
                          } else {
                              $space ="<br>";
                          }
                          $prec = $day;
                          echo $day;
                          echo date("F", strtotime($rs['date'])).", ";
                          echo $space;
                          }

但输出错误:

23 March
25 March

27 March

27 March
27 March
27 March
27 March
28 March

28 March
28 March
02 April

03 April

04 April

我错过了什么?

2 个答案:

答案 0 :(得分:2)

问题是您输出换行符的位置 - 如果您在日期之前而不是之后输出换行符,则输出将按预期进行。

echo $space;
echo $day;
echo date("F", strtotime($rs['date'])).", ";

这是因为您的比较是基于当前值与前一个值的比较,因此生成的结果需要放在这两天之间以遵循相同的逻辑

请记住,如果您碰巧在彼此相邻的一个月内同一天,您的代码仍然会返回错误的输出,因为您只按天比较(如果您按完整日期进行比较,它会更好地工作)

答案 1 :(得分:0)

你必须在echo $ day之前回显$ space

//same days = no <br> tag, different days print a <br>

    $list = [1, 3, 3, 3,4 ];
    $prec ='';
    foreach ($list as $day) {
      if ($day === $prec) {
          $space = ",";
      } else {
          $space ="<br>";
      }
      echo $space;
      echo $day;
      $prec = $day;
    }

结果:

<br>1<br>3,3,3<br>4