php多维数组语法


php multidimensional array syntax

下面的代码在一行中有两个注释掉的变体。如果运行它们,您会看到它们会产生截然不同的结果——在$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;