У меня есть следующий массив с именем $fruits :
Array ( [response] => Array ( [errormessage] => banana ) [blah] => Array ( [blah1] => blahblah1 [blah2] => blahblah2 [blah3] => blahblah3 [blah4] => blahblah4 ) )
Но когда я это делаю:
isset($fruits['response']['errormessage']['orange'])
Он возвращает true !
Что может вызвать такое странное поведение и как я могу это исправить?
Благодаря!
[n] также является способом доступа к символам в строке:
$fruits['response']['errormessage']['orange'] == $fruits['response']['errormessage'][0] // cast to int == b (the first character, at position 0) of 'banana'
Используйте array_key_exists , возможно, в сочетании с is_array .
Это просто сводится к безумной системе PHP.
$fruits['response']['errormessage'] – это строка 'banana' , поэтому вы пытаетесь получить доступ к символу в этой строке индексом ['orange'] .
Строка 'orange' преобразуется в целое число для индексирования, поэтому она становится равной 0 , как в $fruits['response']['errormessage'][0] . 0-й индекс строки является первым символом строки, поэтому для непустых строк она по существу задана. Таким образом isset() возвращает true.
Я не знаю, что вы пытаетесь сделать в первую очередь, поэтому я не могу предложить никаких «исправлений» для этого. Это по дизайну.
исправить
if (is_array($fruits['response']['errormessage']) && isset($fruits['response']['errormessage']['orange'])) { .. }