Почему isset возвращает true?

Здравствуйте, кто может объяснить мне странное поведение isset
Есть массив
Array
(
    [ID] => 134
    [UF_RATING] => 
    [UF_WORKDONE] => Array
        (
        )

    [UF_CHECKCODE] => 
    [UF_IWEB_SMS_PASSWORD] => 
    [UF_ABOUT_UPDATE] => 
)


И есть условие
if(isset($_user["UF_RATING"]) && !isset($_user["UF_RATING"]["TOTAL"]["PLACE"]))
{

}


Почему isset($_user["UF_RATING"]["TOTAL"]["PLACE"]) возвращает true ?
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Это не isset($_user["UF_RATING"]["TOTAL"]["PLACE"]) возвращает true, а isset($_user["UF_RATING"]) возвращает false.

Судя по дампу, у вас же там либо пустая строка, либо false, либо NULL. При пустой строке и false всё работает, как ожидается, а при NULL проваливается первая проверка. Используйте для неё array_key_exists.

Если использовать для отладки вместо print_r дебагер или хотя бы var_dump, такие проблемы будет решать гораздо проще.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы