php strtotime数组排序问题

时间:2013-06-02 20:13:18

标签: php arrays sorting yii

我想先说谢谢你花时间阅读这篇文章。我希望有人能够帮助我,因为我刚开始学习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日星期六> Sun 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'))); 
        }
        ?>

有没有更好的方法来创建一个数组来实现这个并按正确的顺序排序?我错过了一些我已经创建过的数组吗?

非常感谢您提供的任何帮助。

谢谢。

3 个答案:

答案 0 :(得分:0)

将'next sunday'更改为'sunday',将其作为第一个数组元素放入,你应该很好..

答案 1 :(得分:0)

据我所知,对于你想要实现的目标,你会使事情过于复杂:

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

几天自然会以你想要的方式进步,所以你不妨使用这个事实 - 并避免一起排序。您还可以使用php的日期格式,以避免存储日期缩短。

更新

这应该让你知道你可以做什么,我建议你阅读使用PHP的日期函数可以生成的内容 - 它非常有用:)

http://uk1.php.net/manual/en/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));
}

答案 2 :(得分:0)

  

星期天比其他日子显示更大的时间戳,这是因为它以某种方式输出下周日的时间戳而不是今天的时间戳?

是的,这就是您编码的内容:strtotime('next sunday')

如果您想要今天和未来6天,请尝试使用数字,例如+ 1天,......,+ 6天:http://www.php.net/manual/en/dateinterval.createfromdatestring.php