对我来说,解释这一点的最简单方法是举一个例子……下面是问题代码的复制:
<?php
$test=array();
$test['one']='hello';
if(isset($test['one']['two'][0])) {
echo 'Apparently it is set ...';
echo $test['one']['two'][0];
}
?>
返回为:
Apparently it is set ...
Warning: Illegal string offset 'two' in C:\test.php on line 6
h
这是因为有混合键类型吗?这只是我遇到的一个小异常,想知道是否有人可以阐明它 ...
最佳答案
原因是,当你取消引用一个字符串时,它会返回一个包含单个字符的字符串(假设索引不超过长度);生成的字符串可以再次取消引用(从 5.4 开始)。
例如 - link :
$s = 'hello';
$s[0]; // "h"
$s[0][0]; // "h"
// etc. etc.
非法索引,例如 'two'
会引起通知,但它被视为索引 0
, 在内部使用时除外 isset()
.
另一个例子:
$s[0][1]; // ""
$s[0][1][0]; // notice: uninitialised string offset: 0
如果您事先不知道传递的是字符串还是数组,而这对您很重要,则需要在每个路径之间进行额外的类型检查。
关于Php 数组偏移量通过 'isset' ,即使它没有设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27181732/