可以对复杂的PHP for循环进行排序

时间:2013-02-04 23:28:22

标签: php sorting for-loop

是否可以对复杂的循环进行排序?我会将值存储在数组中然后按那个排序吗?

这是我正在使用的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; 

4 个答案:

答案 0 :(得分:2)

将它放在一个数组中,然后参考这篇文章,了解如何按日期排序

How to sort a date array in PHP

答案 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时间戳吗?)

http://php.net/manual/en/function.sort.php

答案 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;

从结束日期开始尝试这个开头减去它。如果你想要它,那么如果我理解你的话就会感到抱歉