PHP和访问字符串就像关联数组

时间:2011-06-20 13:32:17

标签: php string

这是合乎逻辑的行为吗?

$str = 'string';  
$res = $str['some_key'];  
echo (int)isset($str['some_key']); // 1  
echo $res; // 's'  

这是一个错误或不清楚的功能?

2 个答案:

答案 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]

所以有逻辑,无论你是否想要将其称为逻辑,是否由您决定。
但是,如果您使用字符串键访问字符串,那么您的代码仍有问题。 ; - )