[英]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.