以下代码在一行中有两个注释掉的变体。它们会产生相当不同的结果,因为您将看到如果运行它们 - 没有$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>';
}
答案 0 :(得分:3)
"$array[$key]"
被解释为数组访问($array[$key]
的值)。与echo $array[$key];
相同。
"$array [$key]"
被解释为两个不同的变量:$array
和$key
。与echo $array." [".$key."]";
相同。
答案 1 :(得分:0)
输出差异的原因是由于PHP解析包含变量的字符串的方式。
如果你改变:
{echo "<li>$array [$key] = $value ";}
到
{echo "<li>" . $array [$key] . " = $value ";}
它会产生相同的东西和它下面的一行。
{echo "<li>$array[$key] = $value ";}
PHP主要是与空白无关的,但不是内部空白无关紧要的字符串内部。
答案 2 :(得分:0)
请记住&#34;双引号&#34;尝试执行你的代码,而#34;单引号&#34;将代码仅作为文本处理。
在这种情况下:
echo "<li>$array[$key] = $value ";
正在评估此代码。这里是说&#34;把这个值放在这个数组的位置&#34;。另一方面,这个:
echo "<li>$array [$key] = $value ";
没有被评估,因为对于php来说,doens有意义的是它的解析器为这样的东西赋值:
[$someting] = $value;
上面的代码返回致命错误。
你的代码没有返回致命错误,因为php试图以某种不会引发异常的方式处理你的代码。
代码的最后一个示例(带空格的示例)与此相同:
echo '<li>' . $array . '[' . $key . '] = ' . $value;
简而言之:想在某些字符串中显示一些变量?将变量放在php字符串的解释中:
echo $myvar . ' = ' . $myvalue;