Php 将字符串强制转换为数组时允许的行为

Php 将字符串强制转换为数组时允许的行为,php,Php,我在采访中被问到这个问题,为什么这段代码有效并输出12245 $a = '12345'; $a[$a[1]] = '2'; echo $a; // 12245 到目前为止,我自己一直在试图理解这一点,但仍然没有运气 既然$a是一个字符串,并且没有声明为数组,那么$a怎么可能有索引=1?而该索引正被另一个不存在的索引所取代!有人能解释一下吗?使用[]可以像访问数组一样访问PHP字符串。本例中的“索引”是字符串的字符。没有演员阵容 文件: 因此,$a='12345',意思是$a[1]是'2'。

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

$a = '12345';

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

echo $a; // 12245
到目前为止,我自己一直在试图理解这一点,但仍然没有运气


既然
$a
是一个字符串,并且没有声明为数组,那么
$a
怎么可能有
索引=1
?而该索引正被另一个不存在的索引所取代!有人能解释一下吗?

使用
[]
可以像访问数组一样访问PHP字符串。本例中的“索引”是字符串的字符。没有演员阵容

文件:

因此,
$a='12345'
,意思是
$a[1]
'2'
。因此,执行
$a[$a[1]]
就像执行
$a['2']
(字符串
'2'
通过PHP转换为int)


发生的情况是索引
2
处的字符(第三个字符)被替换为
2
。因此,创建
'12245'

作为字符串可以像数组一样引用,然后:

  • $a[1]是“2”//从零开始

  • $a[$a[1]]
    $a[2]
    当前为
    3
    //仍然从零开始

  • $a[2]
    设置为
    2
    可以准确地给出
    12245


  • 不能使用
    echo
    打印数组。字符串可以像数组一样引用。“索引”是字符。这听起来不像是问题的答案me@bad_boy:这正是答案。见: