将字符串转换为数组时允许的奇怪行为

时间:2014-08-20 17:56:42

标签: php

我在面试中被问到这个问题,为什么这段代码有效并输出12245

$a = '12345';

$a[$a[1]] = '2';

echo $a; // 12245

到目前为止,我一直试图理解自己,但仍然没有运气。

由于$a是一个字符串,并且尚未声明为 array ,那么$aindex = 1的情况怎么可能呢?而且该索引正被另一个不存在的索引所取代!请不要有人解释一下吗?

2 个答案:

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

由于字符串可以像数组一样被引用,所以:

  1. $a[1] is '2' // starting from zero

  2. $a[$a[1]]目标为$a[2]3 // still starting from zero

  3. $a[2]设为2可准确提供12245