解析错误似乎取决于我命名的数组索引

时间:2012-04-22 21:32:41

标签: php string echo associative-array

我是PHP的新手。当我使用“echo”打印数组元素时,我的成功似乎取决于我对索引的命名。这不可能是对的,对吧?!我觉得我疯了。这段代码:

$ARRAY['q1'] = 'foo';
echo "q1 is $ARRAY[q1]<br>";

工作正常。但是这段代码:

$ARRAY['1q'] = 'foo';
echo "1q is $ARRAY[1q]<br>";

产生错误:

  

解析错误:语法错误,意外的T_STRING,在第6行的/var/www/html/test.php中期待']'

我知道我可以纠正这样的问题:

echo "1q is " . $ARRAY['1q'] . "<br>";

但我的问题是为什么第一个代码块中的数组索引“1q”与“q1”有关系?我甚至检查过1q是否是某种常数,但似乎不是。这是在字符串中插入数组元素的不正确方法吗? (我从PHP文档中复制了它。)

这是在PHP 5.3.8中。我真的很感激任何帮助。

修改 好的,我在PHP手册的这一页上从例#8中得到了这个echo语法:http://www.php.net/manual/en/language.types.string.php显然这不是正确的做事方式。我将在手册中添加用户提供的注释。

产生此错误的整个脚本将是:

<?php
$ARRAY['1q'] = 'foo';
echo "1q is $ARRAY[1q]<br>"; 
?>

3 个答案:

答案 0 :(得分:3)

因为它试图将数组键视为某种文字。对于q1,这是有效的,因为没有名为q1的常量,因此PHP假设它应该是一个字符串。但是,1q失败了,因为它开始将其视为一个数字。

你不应该在这样的字符串中嵌入数组。使用以下之一:

echo "1q is {$ARRAY['1q']}";
echo "1q is ".$ARRAY['1q'];

答案 1 :(得分:0)

在双引号字符串中使用数组时,如果PHP看到数组键以数字开头,则假定整个键是数字索引,例如

echo "$arr[123abc]";

被解释为$arr[123]abc部分是产生预期字符串错误的部分,因为数字键不能包含非数字组件。

要解决此问题,您必须使用

echo "1q is {$ARRAY['1q]'}<br>";
            ^       ^   ^^

使用正确引用的数组索引

答案 2 :(得分:0)

您不需要连接。试试echo "1q is {$ARRAY['1q']}";

  • 您应该始终使用引号来访问字符串数组键,即使在字符串内也是如此。
  • 在字符串内部{}包含变量是一种很好的做法。