0

下面的代码在一行上有两个注释掉的变体。它们会产生完全不同的结果,如果运行它们,您会看到 - 没有 and 之间的空格$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>';
}
4

3 回答 3

3

"$array[$key]"被解释为数组访问(的值$array[$key])。与 相同echo $array[$key];

"$array [$key]"被解释为两个不同的变量:$array$key。与 相同echo $array." [".$key."]";

于 2013-06-22T22:39:22.640 回答
0

请记住,“双引号”尝试执行您的代码,而“单引号”仅将您的代码作为文本处理。

在这种情况下:

echo "<li>$array[$key] = $value ";

正在评估此代码。这里的意思是“把这个值放在这个数组的这个位置”。另一方面,这:

echo "<li>$array [$key] = $value ";

没有被评估,因为对于 php,它的解析器将值分配给这样的东西没有意义:

[$someting] = $value;

上面的代码返回一个致命错误。

您的代码不会返回致命错误,因为 php 尝试以某种不会引发异常的方式处理您的代码。

您的代码的最后一个示例(带空格的那个)与此相同:

echo '<li>' . $array . '[' . $key . '] = ' . $value;

简而言之:想在某个字符串中显示一些变量?将变量从 php 字符串的解释中删除:

echo $myvar . ' = ' . $myvalue;
于 2013-06-22T22:52:45.830 回答
0

输出差异的原因在于 PHP 解析包含变量的字符串的方式。

如果你改变:

{echo "<li>$array [$key] = $value ";}

{echo "<li>" . $array [$key] . " = $value ";}

这将导致相同的事情和它下面的行。

{echo "<li>$array[$key] = $value ";}

PHP 主要与空白无关,但不在本质上空白很重要的字符串内部。

于 2013-06-22T22:41:53.827 回答