2013-06-22 73 views
0

下面的代码在一行上有两个注释变体。它们会产生相当不同的结果,因为如果运行它们(如果没有$array[$key]之间的空格),将会看到键的单个字母映射到数组值。php多维数组语法

有人可以解释这里发生了什么,为什么?

谢谢!

<?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."]";相同。

0

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

如果更改:

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

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

它会导致同样的事情,下面一行。

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

PHP大多是空白不可知的,但不是在内部空白字符串的内部。

0

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

在这种情况下

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

此代码被评估。这里说的是“把这个值放在这个阵列的这个位置上”。在另一方面,这样的:

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

没有被评估,因为,到PHP,好好尝试一下是有意义的是解析器的值赋给是这样的:

[$someting] = $value; 

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

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

你的代码(带有空格)的最后一个例子是一样的:

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

:要显示在一些字符串变量一些?把变量关闭php字符串的解释:

echo $myvar . ' = ' . $myvalue;