Не срабатывает условие в if

100
26 февраля 2022, 18:50

Задача: Дан инпут и кнопка. В этот инпут вводится дата рождения в формате '31.12'. По нажатию на кнопку выведите знак зодиака пользователя.

Решение:

<form action="" method="POST">
   <input type="text" name="date" placeholder="Введите дату: dd.mm">
   <input type="submit">
</form>

$signs = [1 => "Козерог", "Водолей", "Рыбы", "Овен", "Телец", "Близнецы", "Рак", "Лев", "Девы", "Весы", "Скорпион", "Стрелец"];
$signs_date = [1 => 21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23];
if (isset($_REQUEST['date'])) {
        $date = $_REQUEST['date'];
        $date = explode('.', $date);
        $day = $date[0];
        $month = $date[1]; 
        if (substr($month, 0, 1) == 0) {                
                $month = substr($month, 1, 2);
        } 
        if ($day > $signs_date[$month]) {
                $a = $signs[$month + 1];
        } else  {
                $a = $signs[$month];
        }
        if ($a == 13) {
                echo $signs[1];
        } else {
                echo $a;
        }
} 

Проблема: Если подставить 31.12, то условие php if ($day > $signs_date[$month]) не срабатывает. Почему это происходит?

Answer 1

У Вас в $signs[$month + 1]; При использовании последнего месяца появляется 13-ая позиция(ключ), а в массиве их только 12. Используйте это:

$signs = [1 => "Козерог", "Водолей", "Рыбы", "Овен", "Телец", "Близнецы", "Рак", "Лев", "Девы", "Весы", "Скорпион", "Стрелец"];
$signs_date = [1 => 21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23];
if (isset($_REQUEST['date'])) {
    $date = $_REQUEST['date'];
    $date = explode('.', $date);
    $day = $date[0];
    $month = $date[1];
    if (substr($month, 0, 1) == 0) {
        $month = substr($month, 1, 2);
    }
    if ($day > $signs_date[$month]) {
        if ($month == "12"){
            $month = "0";
        }
        $a = $signs[$month + 1];
    } else  {
        $a = $signs[$month];
    }
    if ($a == 13) {
        echo $signs[1];
    } else {
        echo $a;
    }
}
?>

<form action="" method="POST">
    <input type="text" name="date" placeholder="Введите дату: dd.mm">
    <input type="submit">
</form>
READ ALSO
Как я могу оптимизировать код?

Как я могу оптимизировать код?

Подскажите пожалуйста, как я могу оптимизировать такой код? Знаю, что как-то можно не писать кучу классов и id, а использовать переменную thisОднако,...

65
Замена слов в строке на ****

Замена слов в строке на ****

друзья! Помогите решить вопросСуть, у меня есть инпут, куда пользователь вводит слова и по нажатию на кнопку, они записываються в строку , также...

98