0

我是 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>"; 
?>
4

3 回答 3

3

因为它试图将数组键视为某种文字。之所以可行,是因为q1没有命名常量q1,所以 PHP 假定它应该是一个字符串。1q但是,失败了,因为它开始将其视为一个数字。

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

echo "1q is {$ARRAY['1q']}";
echo "1q is ".$ARRAY['1q'];
于 2012-04-22T21:38:16.633 回答
0

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

echo "$arr[123abc]";

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

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

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

带有正确引用的数组索引

于 2012-04-22T21:41:17.037 回答
0

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

  • 您应该始终使用引号来访问字符串数组键,即使在字符串内部也是如此。
  • 在字符串中包含 {} 上的变量是一种很好的做法。
于 2012-04-22T21:41:52.383 回答