<?php
error_reporting(-1);
$a = array('key' => '2');
$a = $a['key'];
var_dump($a);
echo $a['key'], "\n";
?>
我希望代码抛出空字符串或警告说密钥不存在,但代码打印2;
PHP 5.3.10-1
Update1:添加var_dump和error_reporting。
输出
hari@hari-laptop:~$ php run.php
string(1) "2"
2
答案 0 :(得分:6)
$a
是一个包含值"2"
的字符串。
可以使用方括号将PHP中的字符串编入索引以访问其字符。例如:
$a = "abcde";
echo $a[3]; // This will print 'd'
当索引是字符串时,PHP会尝试将其解析为整数。如果字符串不是数字,则解析将给出0
。因此,使用表示第一个字符的第零个索引。 (在PHP 5.4及更高版本中,它会发出警告)。在您的情况下,您得到“2”,因为$a['any_stuff']
=第一个字符= '2'
来自PHP manual:
按字符串访问和修改字符串
可以通过指定来访问和修改字符串中的字符 字符串使用后所需字符的从零开始的偏移量 方括号括号,如
$str[42]
中所示。将字符串视为数组 为此目的的字符。函数substr()
和 当您想要提取或替换更多内容时,可以使用substr_replace()
超过1个字符。从PHP 5.4开始,字符串偏移必须是整数或类似整数的字符串,否则将引发警告。
答案 1 :(得分:1)
如果为$a['key']
选择不同的值,则更有意义。
$a = array('key' => 'whatever');
$a = $a['key'];
var_dump($a);
echo $a['key'], "\n";
输出是:
string(8) "whatever"
w
首先,echo
命令实际上不是一个函数,而是一个语言结构。括号是可选的。
其次,当您有一个可以作为数组访问的字符串时,PHP会将该字符串视为一个字符数组。但是如果你传递了一个无效的密钥,那么你就得到了第一个字符。
echo $a[0]; // w
echo $a[1]; // h
echo $a[2]; // a
echo $a[3]; // t
echo $a['invalid_key']; // w