Mecitan
@Mecitan
Уверенный пользователь клавиатуры

Как можно оптимизировать данное полотно из if?

Моё почтение! Есть вот такой код в работе, который надо оптимизировать. Сумма расчёта. Логика работы у него следующая. Заполняется форма в поп-ап окне. Отправляется на сервер, делается расчёт, выводится сумма с двумя кнопками. В скрипте две функции. Одна делает расчёт по будням, вторая с пятницы по воскресенье. Стоимость суммы фиксированная. Базы данных не имеется. Сугубо хардкод. Собственно, как это дело можно оптимизировать и сократить кол-во строк в коде?

<form action="calc.php" method="post">
    <label for="adultWithChild">
        <p>
            Взрослые, дети с 14 лет: <input type="text" name="adultWithChild" id="adultWithChild"> чел.
        </p>
    </label>

    <label for="kids">
        <p>
            Дети с 6 до 13 лет: <input type="text" name="social" id="kids">  чел.
        </p>
    </label>
    <label for="socialGroup">
        <p>
            Пенсионеры, инвалиды, Ветераны боевых действий: <input type="text" name="socialGroup" id="socialGroup">
        </p>
    </label>

    <div class="hour">
        "Время пребывания в комплексе:"
        <p>
            <input type="radio" name="time" id="r1" value="1"> 1 час
        </p>

        <p>
            <input type="radio" name="time" id="r2" value="2"> 2 часа
        </p>

        <p>
            <input type="radio" name="time" id="r3" value="3"> 4 часа

        <p>
            <input type="radio" name="time" id="r4" value="4"> Безлимит
        </p>

    </div>

    <br>

    <div class="day">
        <p>
            <input type="radio" name="weekday" id="d1" value="1"> Понедельник - Четверг
        <p>

        <p>
            <input type="radio" name="dayOff" id="d5" value="2"> Пятница - Воскресенье (Праздничные)
        </p>

    </div>
    <input type="submit" value="Рассчитать стоимость">
</form>
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
GavriKos
@GavriKos
Делаете массив, в котором индексом будут значения 1-3 (или какие там еще варианты могут быть у $data['time']), а значением - то что надо вывести. И потом просто достаете что вам нужно по индексу
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Пара забавных фактов:
1. isset() проверяет существование переменной и возвращает true или false.
2. == - не строгое сравнение

В результате условия
if (isset($data['time']) == 2) {}
и
if (isset($data['time']) == 3) {}
Выполнятся оба, независимо от того что там в переменной $data['time']. Или не выполнятся, если ее вообще нет.
Проверим?

То есть у вас вопрос не как сократить, а понять для начала чего вы хотите добиться, а потом уже писать код. С нуля.
Возможно стоит один раз написать формулу расчета, и один массив с коэфициентами (множителями), которые подставляются в формулу в зависимости от выбранной длительности сеанса.
Ответ написан
@nolotion
Вынесите отдельные алгоритмы расчета и через стратегии вызывайте в соответствии с заданной логикой.

Группировать только в массив плохая идея для будущего кода - как только бизнес захочет усложнить условия (выделить разные алгоритмы для разного числа детей) - вся абстракция с массивом внутри начнет обрастать костылями.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы