在Heredoc编写并发布需要{}的多维数组值时。在普通数组中。这里一个示例:
$array = array('normal_key', 'normal_value');
$multidim = array(array('multi0_key', 'multi0_value'),
array('multi1_key', 'multi1_value')
);
$text1 =<<<EOBODY
Hello World!<br />
$array[0] $array[1]<br />
$multidim[0][0] $multidim[0][1]<br />
$multidim[1][0] $multidim[1][1]
EOBODY;
echo $text1;
//This prints:
/* Hello World!
* normal_key normal_value
* Array[0] Array[1]
* Array[0] Array[1] */
$text2 =<<<EOBODY
Hello World!<br />
$array[0] $array[1]<br />
{$multidim[0][0]} {$multidim[0][1]}<br />
{$multidim[1][0]} {$multidim[1][1]}
EOBODY;
echo $text2;
//This prints:
/* Hello World!
* normal_key normal_value
* multi0_key multi0_value
* multi1_key multi1_value */
为什么?
正常。这是PHP解析器"错误" - 在字符串中寻找阵列时并不贪婪:
$arr[1][2] = 'foo';
echo "$arr[1][2]"; non-greedy
echo $arr[1][2]; greedy, outputs 'foo'
被解析为
echo $arr[1], "[2]";
^^^^^^^--array
^^^^--string
output: Array[2]
在字符串上下文中呼应数组将始终输出字面的单词 Array
,而不是数组的内容。
使用{}
符号强制PHP在整个数组中吸吮:
echo "{$arr[1][2]}"; // outpus "foo";
"错误"适用于普通""
引用的字符串和Heredocs。