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

Ссылка скопирована
PHP
1 ответ

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

<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>

<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>

Дополнительно:

сколько раз выводятся ссылки позвонить/уточнить?)

  • Ну, во-первых, стоит выкинуть этот код на пыхе и сделать все на JS, потому что ходить за расчетом на сервер имеет смысл только тогда, когда в нем участвуют БД или внешние API.
    Достаточно повесить обработчики на все эти инпуты, собрать в одну формулу и пару массивов весь расчет - и пересчитывать результат мгновенно при любом изменении формы.
  • Adamos, заказчику важно, чтобы было переделано под сервер. Я пытался ему объяснить то, что написали вы. Но ему принципиально.
  • scottparker, на данный момент, два. :D Там багов хватает))
  • Фёдор, ну, соберите пыховый расчет в одну формулу и пару массивов...
  • Adamos, Именованные массивы, где ключами будут значения из формы?
  • Делаете массив, в котором индексом будут значения 1-3 (или какие там еще варианты могут быть у $data['time']), а значением - то что надо вывести. И потом просто достаете что вам нужно по индексу

    Ответы:

    Пара забавных фактов:
    1. isset() проверяет существование переменной и возвращает true или false.
    2. == - не строгое сравнение

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

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

    • Принял во внимание ваши замечания

    Вынесите отдельные алгоритмы расчета и через стратегии вызывайте в соответствии с заданной логикой.

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

    • А, там вообще логика и представление в куче. Плевать тогда.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Мария Код Ответ

    Для оптимизации данного блока кода из множества условных операторов if можно воспользоваться конструкцией switch-case, которая делает код более читаемым и удобным для поддержки.

    Пример оптимизированного кода с использованием switch-case:

    switch ($variable) {
        case 'value1':
            // код для случая, когда $variable равен 'value1'
            break;
        case 'value2':
            // код для случая, когда $variable равен 'value2'
            break;
        case 'value3':
            // код для случая, когда $variable равен 'value3'
            break;
        default:
            // код, который выполняется, если $variable не равен ни одному из значений 'value1', 'value2', 'value3'
            break;
    }

    switch ($variable) { case 'value1': // код для случая, когда $variable равен 'value1' break; case 'value2': // код для случая, когда $variable равен 'value2' break; case 'value3': // код для случая, когда $variable равен 'value3' break; default: // код, который выполняется, если $variable не равен ни одному из значений 'value1', 'value2', 'value3' break; }

    Таким образом, использование switch-case позволяет заменить множество if-else операторов более компактной и структурированной конструкцией, что повышает читаемость кода и упрощает его поддержку.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно