我有以下名为$fruits
的数组:
Array
(
[response] => Array
(
[errormessage] => banana
)
[blah] => Array
(
[blah1] => blahblah1
[blah2] => blahblah2
[blah3] => blahblah3
[blah4] => blahblah4
)
)
然而,当我这样做时:
isset($fruits['response']['errormessage']['orange'])
返回 true !
究竟是什么导致这种奇怪的行为?我该如何解决这个问题?
谢谢!
答案 0 :(得分:11)
它归结为PHP的疯狂类型系统。
$fruits['response']['errormessage']
是字符串'banana'
,因此您尝试通过['orange']
索引访问该字符串中的字符。
为了编制索引,字符串'orange'
将转换为整数,因此它变为0
,如$fruits['response']['errormessage'][0]
中所示。字符串的第0个索引是字符串的第一个字符,因此对于非空字符串,它基本上是设置的。因此isset()
返回true。
我不知道你最初想要做什么,所以我不能为此提供任何“修复”。这是设计的。
答案 1 :(得分:6)
[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
结合使用。
答案 2 :(得分:0)
修复
if (is_array($fruits['response']['errormessage'])
&& isset($fruits['response']['errormessage']['orange'])) { .. }