任何人都可以解释这个PHP代码?

sp2*_*ari -2 php arrays

<?php
error_reporting(-1);
$a = array('key' => '2');
$a = $a['key'];
var_dump($a);
echo $a['key'], "\n";
?>
Run Code Online (Sandbox Code Playgroud)

我希望代码抛出空字符串或警告说密钥不存在,但代码打印2;

PHP 5.3.10-1

Update1:​​添加var_dump和error_reporting.

输出是

hari@hari-laptop:~$ php run.php  
string(1) "2"  
2  
Run Code Online (Sandbox Code Playgroud)

Azi*_*ziz 6

$a是一个保存值的字符串"2".

可以使用方括号将PHP中的字符串编入索引以访问其字符.例如:

$a = "abcde";
echo $a[3];  // This will print 'd'
Run Code Online (Sandbox Code Playgroud)

当索引是字符串时,PHP会尝试将其解析为整数.如果字符串不是数字,则解析将给出0.因此,使用表示第一个字符的第零个索引.(在PHP 5.4及更高版本中,它会发出警告).在你的情况下,你得到"2"因为$a['any_stuff']=第一个字符='2'

PHP手册:

字符串访问和按字符修改

通过使用方形数组括号指定字符串后所需字符的从零开始的偏移量,可以访问和修改字符串中的字符,如$str[42].将字符串视为用于此目的的字符数组.当您想要提取或替换多个字符时substr(), substr_replace()可以使用这些函数.

从PHP 5.4开始,字符串偏移必须是整数或类似整数的字符串,否则将引发警告.