簡體   English   中英

php strtotime數組排序問題

[英]php strtotime array sorting issue

首先,我要說謝謝您抽出寶貴的時間閱讀這篇文章。 我希望在我剛開始學習PHP時,會有足夠的友善幫助我。 如果我沒有使用正確的術語來描述我的問題,請原諒我。

我在對數組進行排序時遇到問題。

我的數組如下所示:

<?php
$rooms = array(
  strtotime('next monday')=>array('day'=>'monday', 'abbrev'=>'Mon'),
  strtotime('next tuesday')=>array('day'=>'tuesday', 'abbrev'=>'Tue'),
  strtotime('next wednesday')=>array('day'=>'wednesday', 'abbrev'=>'Wed'),
  strtotime('next thursday')=>array('day'=>'thursday', 'abbrev'=>'Thu'),
  strtotime('next friday')=>array('day'=>'friday', 'abbrev'=>'Fri'),
  strtotime('next saturday')=>array('day'=>'saturday', 'abbrev'=>'Sat'),
  strtotime('next sunday')=>array('day'=>'sunday', 'abbrev'=>'Sun'));
ksort($rooms);

foreach($rooms as $room_timestamp=>$room_info) {
  if (time() > strtotime($room_info['day'])) {
  print ($form->checkBox($model,'space_'.$room_info['day'], array('value' => strtotime($room_info['day']))) . $form->labelEx($model,$room_info['abbrev'].' ' . date('n/j', strtotime($room_info['day']))) . '<br />');
  } else {
  print ($form->checkBox($model,'space_'.$room_info['day'], array('value' => strtotime('next '.$room_info['day']))) . $form->labelEx($model,$room_info['abbrev'].' ' . date('n/j', strtotime('next '.$room_info['day']))) . '<br />');
  }
}

echo "<pre>".print_r($rooms,1)."</pre>";
?>

它按以下順序輸出復選框:

星期一6/3
星期二6/4
周三6/5
周六6/6
周五6/7
周六6/8
周日6/2

我想先顯示今天(在這種情況下為Sun 6/2),然后再顯示接下來的6天。

當我使用print_r顯示原始輸出時,它看起來像這樣:

Array
(
    [1370239200] => Array
        (
            [day] => monday
            [abbrev] => Mon
        )

    [1370325600] => Array
        (
            [day] => tuesday
            [abbrev] => Tue
        )

    [1370412000] => Array
        (
            [day] => wednesday
            [abbrev] => Wed
        )

    [1370498400] => Array
        (
            [day] => thursday
            [abbrev] => Thu
        )

    [1370584800] => Array
        (
            [day] => friday
            [abbrev] => Fri
        )

    [1370671200] => Array
        (
            [day] => saturday
            [abbrev] => Sat
        )

    [1370757600] => Array
        (
            [day] => sunday
            [abbrev] => Sun
        )

)

星期日顯示的時間戳要比其他日期大,這是因為以某種方式輸出了下一個星期日的時間戳,而不是今天的時間戳嗎?

最初,我每天使用兩個if / else語句創建復選框和標簽。 無法以這種方式對它們進行排序,因此我試圖創建一個我現在遇到麻煩的數組。

我的原始代碼(此示例為星期二)如下所示:

            <?php
        if (time() > strtotime('tuesday'))
        {
            echo $form->checkBox($model,'space_tuesday', array('value' => strtotime('tuesday'))); 
        }
        else
        {
            echo $form->checkBox($model,'space_tuesday', array('value' => strtotime('next tuesday'))); 
        }

         ?>
        <?php 
        if (time() > strtotime('tuesday'))
        {
            echo $form->labelEx($model,'Tues ' . date('n/j', strtotime('tuesday'))); 
        }
        else
        {
            echo $form->labelEx($model,'Tues ' . date('n/j', strtotime('next tuesday'))); 
        }
        ?>

有沒有更好的方法來創建數組來實現此目的並按正確的順序排序? 我已經創建的數組缺少一些簡單的東西嗎?

您能提供的任何幫助將不勝感激。

謝謝。

將“下一個星期日”更改為“星期天”,將其作為第一個數組元素放入,您應該會很好。

據我了解,對於您想要實現的目標,您正在使事情變得過於復雜:

for ( $i=0; $i<6; $i++ ) {
  echo date('D n/j', strtotime("+$i day")) . '<br />';
}

日子以您想要的方式自然發展,因此您不妨利用這一事實-避免將所有事情放在一起。 您還可以利用php的日期格式來避免也必須存儲幾天的格式。

更新

這應該使您對可以做什么有所了解,建議您閱讀使用PHP的date函數可以生成的內容-這非常有用:)

http://uk1.php.net/manual/zh/function.date.php

for ( $i=0; $i<6; $i++ ) {
  /// pull out our datetime into a variable
  $datetime = strtotime("+$i day");
  /// wrap it with an array ready for checkBox()
  $value = array('value' => $datetime);
  /// generate the different parts we may need from date()
  list($day, $formatted) = explode(',', date('l,D n/j', $datetime));
  /// place those parts where we need them
  echo $form->checkBox($model, "space_" . strtolower($day), $value);
  echo $form->labelEx($model, $formatted));
}

星期日顯示的時間戳要比其他日期大,這是因為以某種方式輸出了下一個星期日的時間戳,而不是今天的時間戳嗎?

是的,這是您編寫的代碼: strtotime('next sunday')

如果需要今天和以后的6天,請嘗試使用數字,例如+1天,...,+ 6天: http : //www.php.net/manual/en/dateinterval.createfromdatestring.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM