我有这样的数组:
$events = [
[
'title' => 'Event 1',
'description' => 'Some Text',
'date_added' => 2016-05-06 14:57:39
],
[
'title' => 'Event 2',
'description' => 'Some Text',
'date_added' => 2016-05-08 14:57:39
],
[
'title' => 'Event 3',
'description' => 'Some Text',
'date_added' => 2016-05-09 14:57:39
],
[
'title' => 'Event 4',
'description' => 'Some Text',
'date_added' => 2016-05-09 15:57:39
]
];
我需要显示这样的数据:
**Today events:**
Event 4,
Event 3
**Yesterday events**
Event 2
**May 6th events**
Event 1
我该怎么做?有可能吗?
这完全符合您的要求。试试这个:
首先,我们需要按日期对记录进行排序。对此,我们可以使用usort()函数。
function compare_date($a, $b) {
if ($a['date_added'] === $b['date_added']){
return 0;
}
return ($a['date_added'] > $b['date_added']) ? -1 : 1;
}
usort($events, "compare_date");
接下来,我们将创建一个自定义数组,其中包含按日期排列的标题。
foreach($events as $event) {
$today_date = strtotime(date("Y-m-d H:i:s"));
$event_date = strtotime($event['date_added']);
$diff = floor(($today_date - $event_date)/(60*60*24));
switch($diff) {
case 0:
$title = "Today events:<br/>";
$result[$title][] = $event['title'];
break;
case 1:
$title = "Yesterday events:<br/>";
$result[$title][] = $event['title'];
break;
default:
$title = date("M jS", $event_date)." Events:<br/>";
$result[$title][] = $event['title'];
}
}
最后,我们遍历这个$result并显示所需的输出。
foreach($result as $k => $rslt) {
echo $k;
echo implode("<br>", $rslt);
echo "<br/>";
}
您可以使用usort():
function date_compare($a, $b) {
$t1 = strtotime($a['date_added']);
$t2 = strtotime($b['date_added']);
return $t1 - $t2;
}
usort($events, 'date_compare');
要显示它们,您可以使用以下foreach语句:
foreach ($events as $key) {
$dt = new DateTime($key['date_added']);
$date = $dt->format('F j');
if($current != $date) {
$current = $date;
echo "<br>**".$date." events:**<br>";
}
echo $key["title"]."<br>";
}
输出:
**May 1 events:**
Event 3
**May 3 events:**
Event 1
**May 8 events:**
Event 2
**May 9 events:**
Event 4
希望这个解决方案有效。祝你一切顺利。
您也可以尝试以下操作:
// method to compare two values
function compare_date($a, $b) {
if ($a['date_added'] === $b['date_added']){
return 0;
}
return ($a['date_added'] > $b['date_added']) ? -1 : 1;
}
// callback function
usort($events, "compare_date");
$today = date("Y-m-d");
$yesterday = date('Y-m-d', strtotime("yesterday"));
$myEvents = array();
foreach ($events as $key => $val) :
$datetime = new DateTime($val['date_added']);
$record_date = $datetime->format('Y-m-d');
if ($today == $record_date):
$myEvents['today'][] = $events[$key];
elseif ($yesterday == $record_date):
$myEvents['yesterday'][] = $events[$key];
else :
$myEvents[$record_date][] = $events[$key];
endif;
endforeach;
// display event
foreach($myEvents as $i => $v):
if ($i!="today" && $i!="yesterday"):
echo date('M d', strtotime($i)) . "<br>";
else :
echo $i . "<br>";
endif;
foreach ($v as $e):
echo $e['title'] . "<br>";
endforeach;
echo "<br>";
endforeach;
上述代码的输出为:
今天
事件4
事件3
昨天
事件2
2006年5月
事件1