1

我想在我的网站上实现这样的东西:Facebook 通知

但我的问题是我无法弄清楚循环机制:

  1. 找到今天相同日期的组。
  2. 然后将日期减一,然后将所有数据与该日期分组。
  3. 减量并再次分组。

这是我的数组形式的数据:

Array (
[0] => Array (
    [name] => test1
    [date] => 2013-07-15 04:02:53
)
[1] => Array (
    [name] => mine2
    [date] => 2013-07-15 03:24:57
)
[2] => Array (
    [name] => mine3
    [date] => 2013-07-12 04:19:59
)
[3] => Array (
    [name] => mine4
    [date] => 2013-07-11 05:05:38
)
[4] => Array (
    [name] => mine5
    [date] => 2013-07-10 05:05:38
)
[5] => Array (
    [name] => ffff
    [date] => 2013-07-10 05:02:38
)
[6] => Array (
    [name] => affff
    [date] => 2013-07-09 05:02:38
)

)

有人想分享他们关于如何在 while/for 循环中对日期进行分组的知识吗?

4

1 回答 1

1

我的方法是遍历数据(假设它按日期排序)并将具有相同日期的所有项目分组如下:

$grouped_data = array();
$lastday = null;
foreach($data as $d){
    $thisday = strtotime(substr($d['date'],0,10));
    $grouped_data[$thisday][] = $d;
    if($thisday != $lastday)
        $lastday = $thisday;
}

现在您所要做的就是遍历分组数据中的日期并显示每个日期中的项目:

foreach($grouped_data as $day => $data){
    echo '<h2>'.date('M d', $day).'</h2>';
    foreach($data as $d){
        echo $d['name'].'<br/>';
    }
}

如果您想显示“今天”或“昨天”而不是日期,那么您可以编写一个简单的条件来检查您正在循环的当前日期是今天还是昨天

$title = date('M d', $day);
if($title === date('M d')){
    $title = 'Today';
}elseif($title === date('M d',mktime(0, 0, 0, date('m'), date('d')-1))){
    $title = 'Yesterday';
}
于 2013-07-14T19:13:06.753 回答