У меня есть следующий массив с именем $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'])) { .. }