下面的代码在一行中有两个注释掉的变体。如果运行它们,您会看到它们会产生截然不同的结果——在$array
和[$key]
之间没有空格的情况下,键的各个字母会映射到数组值。
有人能解释一下这里发生了什么以及为什么?
谢谢!
<?php
$letters = array('A','B','C');
$numbers = array(1,2,3);
$matrix = array('Letter' => $letters, 'Number' => $numbers);
foreach($matrix as $array => $list)
{
echo '<ul>';
foreach($list as $key => $value)
// {echo "<li>$array [$key] = $value ";}
// {echo "<li>$array[$key] = $value ";}
echo '</ul>';
}
"$array[$key]"
被解释为数组访问($array[$key]
的值)。与echo $array[$key];
相同。
"$array [$key]"
被解释为两个不同的变量:$array
和$key
。与echo $array." [".$key."]";
相同。
输出差异的原因是PHP解析包含变量的字符串的方式。
如果您更改:
{echo "<li>$array [$key] = $value ";}
至
{echo "<li>" . $array [$key] . " = $value ";}
它将导致相同的事情和它下面的线。
{echo "<li>$array[$key] = $value ";}
PHP大多与空白无关,但在本质上空白很重要的字符串内部则不然。
请记住,"双引号"试图执行代码,而"单引号"仅将代码作为文本处理。
在这种情况下:
echo "<li>$array[$key] = $value ";
正在评估此代码。这里说的是"把这个值放在这个数组的这个位置"。另一方面,这个:
echo "<li>$array [$key] = $value ";
没有被评估,因为对php来说,它的解析器将值分配给这样的东西是没有意义的:
[$someting] = $value;
上面的代码返回一个致命错误。
您的代码不会返回致命错误,因为php试图以某种不会引发异常的方式处理您的代码。
你的代码的最后一个例子(带空格的)与以下相同:
echo '<li>' . $array . '[' . $key . '] = ' . $value;
简而言之:想在某个字符串中显示某个变量吗?将变量从php字符串的解释中删除:
echo $myvar . ' = ' . $myvalue;