这是合乎逻辑的行为吗?
$str = 'string';
$res = $str['some_key'];
echo (int)isset($str['some_key']); // 1
echo $res; // 's'
这是一个错误或不清楚的功能?
答案 0 :(得分:10)
这是一个“功能”。使用$string[$index]
时,$index
被视为整数,因此'some_key'
会转换为0
。这也是's'
中$str
$res
的第一个字母的原因。
$str = 'Lorem';
var_dump($str['key']); // L, because (int)'key' is 0
var_dump($str['0key']); // L
var_dump($str['1key']); // o, because (int)'1key' is 1
var_dump($str['2key']); // r
var_dump($str['3key']); // e, because (int)'3key' is 3
var_dump($str['4key']); // m
var_dump($str['5key']); // Notice: Uninitialized string offset: 5 in sandbox\index.php on line 20
答案 1 :(得分:3)
Accessing strings like arrays is a feature.
字符串只有数字偏移,您使用的任何“键”都会转换为int
Non-numeric strings cast to the int 0
.
因此$str["foo"]
相当于$str[0]
。
所以有逻辑,无论你是否想要将其称为逻辑,是否由您决定。
但是,如果您使用字符串键访问字符串,那么您的代码仍有问题。 ; - )