За последние 24 часа нас посетили 17580 программистов и 1713 роботов. Сейчас ищут 928 программистов ...

Избавиться от дублирования

Тема в разделе "PHP для новичков", создана пользователем Razorfen, 19 апр 2018.

  1. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Привет.
    Как сократить этот код, чтобы не дублировать вывод <div> с одинаковым содержимым? То, что внутри <div> нужно выводить только в случае, если id является 0 или 1. Дело в том, что id также может принимать и другие значения. Выводить <div> при других значениях не нужно.
    http://sandbox.onlinephpfunctions.com/code/5e8974a3896aee770df173e122bac5d19aa1bd1f
    Код (Text):
    1. <?php
    2.  
    3. $id = 1;
    4.  
    5. switch($id)
    6.     {
    7.         case 0:
    8.         echo "<span>Lorem</span>";
    9.         echo "<div>Dolor sit amet</div>";
    10.         break;
    11.         case 1:
    12.         echo "<span>Ipsum</span>";
    13.         echo "<div>Dolor sit amet</div>";
    14.     }
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    if($id == 1 || $id == 2) code
    if($id != 1 || $id != 2) break;
     
  3. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Спасибо. Можете полностью код показать?
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Прочти документацию. Не мучь себя
    Код (Text):
    1. $id = 1;
    2. if($id == 1 || $id == 2) echo "<span>Lorem</span><div>Dolor sit amet</div>";
     
  5. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Поэтому и спросил - , к сожалению, не то.
    Получается тоже самое, что с
    Код (Text):
    1. case 0:
    2. case 1:
    Кроме того содержимое span'ов (в отличие от div) различается (lorem и ipsum).
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Razorfen, для начала просто вынесите вывод "Dolor..." за пределы switch, в блок if($id == 1 || $id == 0) {}
    Ну а после - подумайте над тем, чтобы вместо того, чтобы сразу отдавать echo, формировать строковую переменную. И по окончании этого процесса - echo.
     
    Razorfen нравится это.
  7. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    if($id != 1 && $id != 2) break;
     
  8. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Имеете ввиду так? http://sandbox.onlinephpfunctions.com/code/85bf7ae324ef47e77532d27d721cce5a5922c171
    Код (Text):
    1. <?php
    2.  
    3. $id = 1;
    4.  
    5. $var = "<div>Dolor sit amet</div>";
    6.  
    7. switch($id)
    8.     {
    9.         case 0:
    10.         echo "<span>Lorem</span>";
    11.         echo $var;
    12.         break;
    13.         case 1:
    14.         echo "<span>Ipsum</span>";
    15.         echo $var;
    16.     }
    17.    
    Это понятно, но можно сократить еще?
     
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Razorfen, не совсем :)
    Вот вариант с "выносом":
    PHP:
    1. $id = 1;
    2. switch($id)
    3.     {
    4.         case 0:
    5.         echo "<span>Lorem</span>";
    6.         break;
    7.         case 1:
    8.         echo "<span>Ipsum</span>";
    9.     }
    10. if($id == 1 || $id == 0) {
    11.     echo "<div>Dolor sit amet</div>";
    12. }
    --- Добавлено ---
    или так (с переменной):
    PHP:
    1. $id = rand(0,1);
    2. // где-то в коде (до места, где требуется вывод) формируем переменную
    3. $str = '<span>';
    4. switch($id)
    5.     {
    6.         case 0:
    7.         $str += "Lorem";
    8.         break;
    9.         case 1:
    10.         $str += "Ipsum";
    11.     }
    12. if($id == 1 || $id == 0) {
    13.     $str = "</span><div>Dolor sit amet</div>";
    14. }
    15. // в том месте шаблона, где требуется - выводим
    16. echo $str;
    Или можно из "предопредёленных значений составить массив с индексами равными ожидаемым $id и, проверив на существование ключа этого массива - записывать в строковую переменную соответствующий элемент массива и дописывать "хвост". Ну, или выводить.
     
    Razorfen нравится это.