1

我想首先说感谢您抽出时间阅读这篇文章。我希望有人能在我刚开始学习 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 显示原始输出时,它看起来像这样:

大批
(
    [1370239200] => 数组
        (
            [日] => 星期一
            [缩写] => 星期一
        )

    [1370325600] => 数组
        (
            [天] => 星期二
            [缩写] => 星期二
        )

    [1370412000] => 数组
        (
            [日] => 星期三
            [缩写] => 星期三
        )

    [1370498400] => 数组
        (
            [天] => 星期四
            [缩写] => 星期四
        )

    [1370584800] => 数组
        (
            [日] => 星期五
            [缩写] => 星期五
        )

    [1370671200] => 数组
        (
            [天] => 星期六
            [缩写] => 星期六
        )

    [1370757600] => 数组
        (
            [日] => 星期日
            [缩写] => 太阳
        )

)

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

最初,我每天使用两个 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'))); 
        }
        ?>

有没有更好的方法来创建一个数组来实现这一点并按正确的顺序排序?我已经创建的数组是否缺少一些简单的东西?

您能提供的任何帮助将不胜感激。

谢谢你。

4

3 回答 3

0

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

于 2013-06-02T20:23:37.377 回答
0

据我了解,对于您想要实现的目标,您将事情复杂化了:

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

日子自然会按照你想要的方式发展,所以你不妨利用这个事实——避免把所有的东西放在一起。您还可以使用 php 的日期格式来避免存储简短的日期。

更新

这应该让您了解您可以做什么,我建议您阅读使用 PHP 的 date 函数可以生成的内容 - 它非常有用:)

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));
}
于 2013-06-02T20:27:09.717 回答
0

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

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

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

于 2013-06-02T20:27:11.033 回答