Facebook风格的通知日期循环


Facebook style notification date loop?

我想在我的网站上实现这样的东西: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
)

)

有人想分享他们关于如何在一段时间内将日期分组的知识吗?

我的方法是循环浏览数据(假设它是按日期排序的),并将具有相同日期的所有项目分组,如下所示:

$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';
}