是否可以对复杂的循环进行排序?我会将值存储在数组中然后按那个排序吗?
这是我正在使用的for循环,我想按日期排序&我正在经历的事件的时间
foreach ($recurring_events as $recurring_event):
if ($recurring_event->period == 'week') {
$StartDate = strtotime($event->RequestDateStart);
$EndDate = strtotime($event->RequestDateEnd);
$TotalDays = round(($EndDate-$StartDate)/(60*60*24*7));
for($i=0; $i<($TotalDays-1); $i++) {
$StartDate += (60*60*24*7);
if (date('WMY', $StartDate) == date('WMY')) {
echo '<div class="col-12">';
echo '<strong>Event Name:</strong> ' . $event->EventName . '<br /><strong>Date:</strong> ' . date('l, F j o',$StartDate) . '<br /><strong>Start Time:</strong> ' . date('g:i a',strtotime($event->RequestTimeStart));
echo '</div>';
}
}
}
endforeach;
答案 0 :(得分:2)
将它放在一个数组中,然后参考这篇文章,了解如何按日期排序
答案 1 :(得分:1)
您需要将结果放入数组中,然后对其进行排序,然后输出。
$output = array();
foreach ($recurring_events as $recurring_event):
if ($recurring_event->period == 'week') {
$StartDate = strtotime($event->RequestDateStart);
$EndDate = strtotime($event->RequestDateEnd);
$TotalDays = round(($EndDate-$StartDate)/(60*60*24*7));
for($i=0; $i<($TotalDays-1); $i++) {
$StartDate += (60*60*24*7);
if (date('WMY', $StartDate) == date('WMY')) { //$StartDate >= strtotime('now') &&
$output[$StartDate] .= '<div class="col-12">';
$output[$StartDate] .='<strong>Event Name:</strong> ' . $event->EventName . '<br /><strong>Date:</strong> ' . date('l, F j o',$StartDate) . '<br /><strong>Start Time:</strong> ' . date('g:i a',strtotime($event->RequestTimeStart));
$output[$StartDate] .='</div>';
}
}
}
endforeach;
然后使用sort
sort($output);
假设您的StartDate是您需要的日期(那么它应该是一个unix时间戳吗?)
答案 2 :(得分:1)
在循环数据输出时,无法对数据进行排序。而是对数据进行排序,然后循环排序的数据以输出。
一个有用的函数是uasort,它接受一个数组并使用你定义的函数对它进行排序:
function sortEvents($a, $b) {
if (strtotime($a->RequestDateStart) == strtotime($b->RequestDateStart)) {
return 0;
}
return ($a->RequestDateStart < $b->RequestDateStart) ? -1 : 1;
}
uasort($recurring_events,'sortEvents');
答案 3 :(得分:0)
foreach ($recurring_events as $recurring_event):
if ($recurring_event->period == 'week') {
$StartDate = strtotime($event->RequestDateStart);
$EndDate = strtotime($event->RequestDateEnd);
$TotalDays = round(($EndDate-$StartDate)/(60*60*24*7));
for($i=0; $i<($TotalDays-1); $i++) {
$EndDate -= (60*60*24*7);
if (date('WMY', $StartDate) == date('WMY')) {
echo '<div class="col-12">';
echo '<strong>Event Name:</strong> ' . $event->EventName . '<br /><strong>Date:</strong> ' . date('l, F j o',$StartDate) . '<br /><strong>Start Time:</strong> ' . date('g:i a',strtotime($event->RequestTimeStart));
echo '</div>';
}
}
}
endforeach;
从结束日期开始尝试这个开头减去它。如果你想要它,那么如果我理解你的话就会感到抱歉