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


parse error seems to depend on what I name my array index

我是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中获得了此回显语法: http://www.php.net/manual/en/language.types.string.php 显然这不是正确的做事方式。 我将在手册中添加用户贡献的注释。

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

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

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

无论如何,您都不应该在这样的字符串中嵌入数组。使用以下方法之一:

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

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

echo "$arr[123abc]";

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

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

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

使用正确引用的数组索引

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

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