За последние 24 часа нас посетили 35455 программистов и 1746 роботов. Сейчас ищут 858 программистов ...

if - не работает, switch - долго писать. Есть ли компромис?

Тема в разделе "PHP для новичков", создана пользователем viktor72, 1 авг 2017.

Метки:
  1. viktor72

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

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Добрый день

    PHP:
    1. if($row[idstatus_vakans] == 2 OR 3 OR 4 ....){
    2. echo ......
    3. ...}
    Так не работает .
    Не хочется писать switch. есть какое то простое решение без длинного кода?
    Спасибо
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    isset()
     
    viktor72 нравится это.
  3. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    in_array
    PHP:
    1. if(in_array($row['idstatus_vakans'], [2, 3, 4, ....])){
    2. echo ......
    3. ...}
     
    #3 Maputo, 1 авг 2017
    Последнее редактирование: 1 авг 2017
    viktor72 нравится это.
  4. viktor72

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

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    выдало ошибку
    --- Добавлено ---
    isset ... пробую , но что то не так..
    если (присутствует (переменная [с числом] равным х или y или z){
    то, выполняю действие
    }
    Вроде всё правильно но не работает
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    А скопипастить ошибку слабо? Хотя, вангую, используете php < 5.4, поэтому краткого синтаксиса массивов нету
    PHP:
    1. if(in_array($row['idstatus_vakans'],array (2,3,4,....)))
     
    viktor72 и Maputo нравится это.
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    in_arrray() правильно все же использовать...
    но вы и сравнение то неверно записываете, синтаксис такой
    PHP:
    1. if($row[idstatus_vakans] == 2 OR $row[idstatus_vakans] ==3 OR $row[idstatus_vakans] ==4 ....){
    2.  
    3.     echo ......
    4.     ...}
     
    viktor72 нравится это.
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    isset кажется быстрее чем in_array
     
    viktor72 нравится это.
  8. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @mkramer, я подозреваю, что все дело в многоточии.
     
    viktor72 нравится это.
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это дольше, чем на форуме вопрос задавать и индусятину разгребать?
    --- Добавлено ---
    Народ, давайте не забывать о самодокументируемости кода. Юзание иссетов и инарэеев с константами в качестве значений там, где "лень писать свитч", может потом автору выйти боком. У всех языковых конструкций есть не только вход и выход, но и контекст применения.
     
    viktor72 нравится это.
  10. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, чисто мое мнение, что isset и in_array с булевыми значениями более правильно использовать в контексте условного оператора if, чем хак для switch:
    PHP:
    1. switch(...)
    2. {
    3.     case 2:
    4.     case 3:
    5.     case 4:
    6.     ...
    7.     break;
    8. }
     
    viktor72 нравится это.
  11. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    А не легче так:
    PHP:
    1. $array = ["активна", "неактивна", "в архиве"];
    2.  
    3. echo $array[$row['id_status']];
     
    #11 Sergey_Tsarev, 1 авг 2017
    Последнее редактирование: 1 авг 2017
    viktor72 нравится это.
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Чойта хак-то сразу? Это документированная фича. Она есть во всех сиподобных языках, по крайней мере во всех сиподобных языках, какие я знаю.

    Это гибкое расширяемое решение, на случай, если для определенных значений понадобится задать отдельное поведение приложения.
     
    viktor72 нравится это.
  13. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, пусть будет фича. Я их часто путаю. ;)
     
    viktor72 нравится это.
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ну я к тому, что это не баг интерпретатора и не косяк языка, как, например, возможность дергать в статичной форме методы класса через экземпляр этого класса. Это вот реально косячина. А такое поведение свитча - это так и задумано изначально было, так что все окей :)
     
    viktor72 нравится это.
  15. viktor72

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

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Много красивых слов , не все понял, но спасибо! Вот это работает:
    Узнал в мануале про in_array . спасибо
     
    Sergey_Tsarev нравится это.