I have the following array called $fruits
:
Array
(
[response] => Array
(
[errormessage] => banana
)
[blah] => Array
(
[blah1] => blahblah1
[blah2] => blahblah2
[blah3] => blahblah3
[blah4] => blahblah4
)
)
Yet when I do:
isset($fruits['response']['errormessage']['orange'])
It returns true!
What on earth would cause such a strange behavior and how can I fix this?
Thanks!
[n]
is also a way to access characters in a string:
$fruits['response']['errormessage']['orange']
==
$fruits['response']['errormessage'][0] // cast to int
==
b (the first character, at position 0) of 'banana'
Use array_key_exists
, possibly in combination with is_array
.
It just boils down to PHP's crazy type system.
$fruits['response']['errormessage']
is the string 'banana'
, so you're attempting to access a character in that string by the ['orange']
index.
The string 'orange'
is converted to an integer for the purposes of indexing, so it becomes 0
, as in $fruits['response']['errormessage'][0]
. The 0th index of a string is the first character of the string, so for non-empty strings it's essentially set. Thus isset()
returns true.
I don't know what you're trying to do in the first place so I can't offer any "fix" for this. It's by design.
to fix
if (is_array($fruits['response']['errormessage'])
&& isset($fruits['response']['errormessage']['orange'])) { .. }