首页 > 解决方案 > 使用 foreach 为每组记录指定时间戳

问题描述

如果我有 20 行,则每 5 行在不同的小时内都有一个创建时间戳。(例如,下午 4 点创建了 5 行,下午 5 点创建了接下来的 5 行……等等)。我想创建一个 foreach 来显示 20 行,但在每 5 行的顶部,我想指定这些属于 4PM 或 5 PM 等,这是数据库中的时间戳。我只是想知道如何做到这一点的想法。

例如,以下查询将带来 20 行,其中每 5 行将具有不同的时间戳:


      $fwinners2 = Answer::where('ttype',$id)
                  ->where('qrank',2)             
                  ->orderby('rank', 'asc') 
                  ->get(); 

以下是刀片中的 foreach :

@foreach($fwin2 as $fwin2)

    <div>
     <a>{{$fwin2->body}}</a>

    </div>


@endforeach

标签: phpmysqllaravel

解决方案


在纯 PHP 中,这样的事情可以解决问题(假设行按时间戳排序,即$row['timestamp']unix 时间戳,否则将其包装strtotime或转换为 unix 时间戳):

<?php

// ... select rows from DB here

$currentHour = null;

foreach ($rows as $row){

  // get current row's hour and am/pm, and check if its different than previous, if yes, echo it

  $rowHour = date('h A',$row['timestamp']);
  if ($rowHour !== $currentHour){
    echo $rowHour;
    $currentHour = $rowHour;
  }

  // display row here

}

推荐阅读