当索引为 0 时如何使用 $array[$i-1]


How to use $array[$i-1] when index is on 0

我有这样的代码 - 我取一个用户值,如果它在数组中,它将输出该数组值、它后面的值和之前的值。他们的方式我已经做到了(我不确定是否有更简单的方法!),唯一的问题是 - 如果值已经索引为 0,它不能 -1 并且会导致错误。我希望它做的是,如果用户输入星期一,那么输出将是 - 星期日,星期一,星期二。

我将如何做到这一点,以便如果用户确实输入星期一,我会放最后一个值?

这是我的代码 -

<?php
         $user_input = $_POST ['user_input'];
         $user_input_lower = strtolower($user_input);
           $days= array(
            0 => 'Monday',
            1 => 'Tuesday',
            2 => 'Wednesday',
            3 => 'Thursday',
            4 => 'Friday',
            5 => 'Saturday',
            6 => 'Sunday'
            );
          for ($i=0; $i < 7 ; $i++) { 
          if(isset($days[$i]) && $days[$i] == $user_input_lower) {
            {
              {
              echo strtoupper($days[$i-1]) . "<br>";
              echo strtoupper($days[$i]) . "<br>";
              echo strtoupper($days[$i+1]) . "<br>";
              }
            }
        }
      }
        ?>

谢谢!

您可以添加 if 大小写。

if($i == 0)
    echo "SUNDAY";
else
    echo strtoupper($days[$i-1]);

您可以在echo之前添加if

if($i>0){
    echo strtoupper($days[$i-1]) . "<br>";
} else {
    echo "Monday";
}

有了日期和时间,使用专门为此开发的PHP函数要容易得多,而不是重新发明轮子。下面是使用DateTime对象的简单示例:

$now = new 'DateTime('monday');
$next = clone $now;
$next->modify('+1 day');
$prev = clone $now;
$prev->modify('-1 day');
print $prev->format('l');  // "Sunday"
print $now->format('l');   // "Monday"
print $next->format('l');  // "Tuesday"

或者,您的代码可能如下所示:

$days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
if (false !== $i = array_search('Monday', $days)) {
    print $i > 0 ? $days[$i-1] : $days[6];  // "Sunday"
    print $days[$i];                        // "Monday"
    print $i < 6 ? $days[$i+1] : $days[0];  // "Tuesday"
}

这两种解决方案都可以在一周中的"边缘"日(即"星期一"和"星期日")上正常工作。