Facebook风格通知日期循环?

时间:2013-07-14 18:03:28

标签: php loops

我想在我的网站上实现类似的内容:Facebook Notification

但我的问题是我无法找出循环机制:

  1. 今天查找具有相同日期的群组。
  2. 然后将日期减1,然后将该日期的所有数据分组。
  3. 再次减少和分组。
  4. 这是我的数组形式的数据:

    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循环中对日期进行分组的知识吗?

1 个答案:

答案 0 :(得分: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';
}