双引号嵌套数组不起作用

Double quoted nested array won't work

考虑一下:

$a = 'u';
$b[$a] = 'v';
$c[$b[$a]] = 'w';

这很好用:

php > echo $c[$b[$a]];
w

这也有效:

php > echo '$c[$b[$a]]';
'$c[$b[$a]]'

但是这会导致语法错误:

php > echo "$c[$b[$a]]";

PHP Parse error: syntax error, unexpected '[', expecting ']'

虽然较短的版本有效:

php > echo "$b[$a]";
v

为什么?

简短的回答是:不要这样写 PHP!如果阅读起来很混乱,请使用中间变量。

但是,它可以修复:看起来 PHP 只需要变量最外边缘的大括号分隔符:

<?php
$a = 'u';
$b[$a] = 'v';
$c[$b[$a]] = 'w';

echo "{$c[$b[$a]]}";

这个也可以:

echo "${c[$b[$a]]}";

在第一种情况下,整个事情都用大括号括起来,在第二种情况下,$ 允许在大括号结构之外表示下一位是变量。

double quoted string there are two kinds of variable parsing里,简单又复杂。简单解析仅适用于一维数组或对象。所以这些会起作用:

echo "Valid: $foo[1]";
echo "Valid: $foo[bar]";
echo "Valid: $foo->bar";

但这些不会:

echo "Invalid: $foo[1][2]";
echo "Invalid: $foo->bar->baz";
echo "Invalid: $foo->bar()[2]";

复杂的解析是 halfer 在他的回答中建议的,它将表达式用花​​括号括起来,确实可以解决您的问题:

echo "Valid: ${foo[1][2]}";
echo "Valid: ${foo->bar->baz}";
echo "Valid: ${foo->bar()[2]}";