За последние 24 часа нас посетили 22309 программистов и 1025 роботов. Сейчас ищут 722 программиста ...

Почему не срабатывает if условие на пустое значение

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

Метки:
  1. victort

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

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Здравствуйте, подскажите пожалуйста почему не срабатывает последнее условие проверки if. Проверяю значение массивов в цикле на пустоту вот такой командой if($array[value][value]!='') {тогда выполнить код} Т.е. если значение не пустое выполнить код. При этом перед данным массивом выполняю проверку других массивов все работает а этот массив идет на проверку последним и при значении скажем [3] => он все равно выполняет код.

    Вот часть значений данного массива $sv['metki'][$num]: Array ( [0] => Параметр [1] => Параметр1 [2] => [3] => [4] => [5] =>[6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => Параметр18 [19] => [20] => [21] => [22] => [23] => [24] => [25] => [26] => [27] => [28] => [29] => [30] => [31] => [32] => [33] => [34] => [35] => [36] => [37] => [38] => [39] => [40] => [41] => [42] => [43] => [44] =>Параметр44 [45] => [46] => [47]
    Вот сам код:
    Код (Text):
    1.  for ($num=0; $num<$l; $num++) {
    2. if($sv['op_rab'][$num]!='') {znachenie_na ekran( ($sv['op_rab'][$num]);} //работает
    3. if($sv['graf_rab'][$num]!='') {znachenie_na_ekran ($sv['graf_rab'][$num]);}//работает
    4. if($sv['id_obrz'][$num]!='') {znachenie_na_ekran ($sv['id_obrz'][$num]);}//работает
    5. if($sv['treb'][$num]!='') {znachenie_na_ekran ($sv['treb'][$num]);}//работает
    6. if ($sv['usl'][$num]!='') {znachenie_na_ekran ($sv['usl'][$num]);}//работает
    7. if ($sv['id_raion'][$num]=='') {$sv['id_raion'][$num]="Не важен";}// если пустое значение заменяю на новое значение
    8. znachenie_na_ekran ($sv['id_raion'][$num]);//выводим на экран раз значение никогда не будет пустым
    9. if($sv['metki'][$num]!='') { znachenie_na_ekran ($sv['metki'][$num]); НЕ РАБОТАЕТ УСЛОВИЕ.
    10. }
     
  2. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Попробуйте заменить != на !==
    Возможно, у вас там содержимое, которое может быть приведено к пустой строке при нестрогом сравнении.
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    @victort надо уточнить - условие срабатывает когда не должно, или не срабатывает когда должно?
     
  4. victort

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

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Я же в условии четко написал если не пустое тогда на экран вывести.
    --- Добавлено ---
    К сожалению данное условие не срабатывает !==. Читал что можно попробовать через count массива, но это не совсем наверное правильно ведь если if пропускает то count должен быть равен 1 - протестирую. А так я пробовал и вот так писать !=" " Т.е. != || !=" " (если не пустое значение или не пробел то выполнить)
     
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @victort, покажите var_dump($sv['metki'][3]);
     
  6. victort

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

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    вот результат: string(2) " "
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    И, выводится когда пустое? Или не выводится, когда не пустое? В чем именно проблема?
     
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Это значение не пустое.
     
  9. victort

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

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    В таком случае я вот какую использую конструкцию: $sv['metki'][$num]=trim($sv['metki'][$num]); // удаляю пробелы а потом проверяю на условие: if ($sv['metki'][$num]!='' && $sv['metki'][$num]!=' ') {выполнить} // не пустой и не пробел тогда выполнить. Можно наверное trim в условие записать чтоб команда в одну строчку была.
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    да, trim() и лучше привыкай для строк использовать только строгое сравнение: === либо !== иначе можно словить непрошенный кастинг в число )))
    типа
    PHP:
    1. var_dump(0=="a"); // 0 == 0 -> true
    --- Добавлено ---
    P.S.
    это ужас-ужас!