我在面试中被问到这个问题,为什么这段代码有效并输出12245
$a = '12345';
$a[$a[1]] = '2';
echo $a; // 12245
到目前为止,我一直试图理解自己,但仍然没有运气。
由于$a
是一个字符串,并且尚未声明为 array ,那么$a
有index = 1
的情况怎么可能呢?而且该索引正被另一个不存在的索引所取代!请不要有人解释一下吗?
答案 0 :(得分:3)
可以使用[]
像数组一样访问PHP字符串。在这种情况下,“索引”是字符串的字符。没有施法。
文档:http://php.net/manual/en/language.types.string.php#language.types.string.substr
因此,对于$a = '12345';
,这意味着$a[1]
为'2'
。因此,执行$a[$a[1]]
就像执行$a['2']
一样(PHP将字符串'2'
转换为int)。
正在发生的事情是索引2
(第3个字符)的字符正在被2
替换。从而创建'12245'
。
答案 1 :(得分:3)
由于字符串可以像数组一样被引用,所以:
$a[1] is '2' // starting from zero
$a[$a[1]]
目标为$a[2]
,3
// still starting from zero
将$a[2]
设为2
可准确提供12245