Php 当数组中没有这样的索引时,为什么返回字符串值?
可能重复:Php 当数组中没有这样的索引时,为什么返回字符串值?,php,string,Php,String,可能重复: 但是“$arr”数组中没有“out”索引,那么为什么它返回“string(1)”1呢 本手册没有帮助,因为它只对一维数组进行采样: $a = array ('test' => 1, 'hello' => NULL); var_dump( isset ($a['test']) ); // TRUE var_dump( isset ($a['foo']) ); // FALSE var_dump( isset ($a['hel
但是“$arr”数组中没有“out”索引,那么为什么它返回“string(1)”1呢 本手册没有帮助,因为它只对一维数组进行采样:
$a = array ('test' => 1, 'hello' => NULL);
var_dump( isset ($a['test']) ); // TRUE
var_dump( isset ($a['foo']) ); // FALSE
var_dump( isset ($a['hello']) ); // FALSE
考虑这一点:
$str = 'test';
var_dump(isset($str['xxx'])); // true
它返回true,因为:
- PHP支持
语法(用于处理字符串的各个字符)$str[$n]
- 计算索引时,将其转换为整数类型
- 当转换为整数时,
为“xxx”
;您正在访问0
-该$str[0]
字符串的第一个字符,它($str
)是一个真实值t
之所以这样做,是因为
eee
索引包含一个值字符串,而字符串可以作为数组访问。当您在字符串中使用索引out
时,它将out
转换为0
的整数值,给您$arr[“application”][“aaa”][“ddd”][“eee”][0]
,等于1
您可以使用is\u array()
来防止这种情况:
它似乎返回$arr[“application”][“aaa”][“ddd”][“eee”]value“12345”的第一个字符“1”,甚至连key“out”都不存在。哇,这对我来说是全新的。我想,这是因为“out”被转换为“0”。我们应该记住的是,
isset()
不是豁免,也不是PHPs动态键入的解决方法。@mario感谢您的通知,问题可能是duplicated@user1063434:请注意,重复链接是超链接的首要条件,不会降低您的问题的趣味性或有效性。请参阅,isset
非常方便,因为它很早就失败了,也就是说,如果这个['aaa']['bbb']['ccc']
偏移量中的任何一个不可访问,它只会返回FALSE
。使用is_数组并不太好:你必须确保最后两个偏移量确实存在。@raina77ow是的,你可以使用isset($var['aaa']['bbb']['ccc'])
然后is_数组($var['aaa']['bbb']['ccc']['xxx'])
;在OP的例子中,isset()
是true
——他只需要验证它是否是一个数组,然后再将其作为数组处理。
$a = array ('test' => 1, 'hello' => NULL);
var_dump( isset ($a['test']) ); // TRUE
var_dump( isset ($a['foo']) ); // FALSE
var_dump( isset ($a['hello']) ); // FALSE
$str = 'test';
var_dump(isset($str['xxx'])); // true
if (is_array($arr["application"]["aaa"]["ddd"]["eee"]) && isset($arr["application"]["aaa"]["ddd"]["eee"]['out'])) {