0

複雑なforループをソートすることは可能ですか?値を配列に格納してから、それで並べ替えますか?

これは私が作業している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

4 に答える 4

2

配列に入れて、日付で並べ替える方法については、この投稿を参照してください

PHPで日付配列をソートする方法

于 2013-02-04T23:31:08.120 に答える
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');
于 2013-02-04T23:37:46.513 に答える
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($output);

StartDateが必要な日付であると仮定すると(それでは、UNIXのタイムスタンプである必要がありますか?)

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

于 2013-02-04T23:30:12.490 に答える
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;

終了日からこの開始を試して、それを差し引いてください。必要に応じて、質問を理解した場合は申し訳ありません。

于 2013-02-09T07:47:49.270 に答える