2012-04-22 58 views
0

我是PHP新手。当我使用“echo”打印一个数组元素时,我的成功似乎取决于我所说的索引。那不对,对吧?!我觉得我疯了。此代码:解析错误似乎取决于我的名字我的数组索引

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

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

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

产生错误:

Parse error: syntax error, unexpected T_STRING, expecting ']' in /var/www/html/test.php on line 6

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

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

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

这是PHP 5.3.8。我非常感谢任何帮助。

编辑: 好吧,我从实例#8这个回声语法PHP手册的此页上:http://www.php.net/manual/en/language.types.string.php显然,这不是做事情的正确方法。我将在手册中添加用户提供的注释。

产生这个错误将是一个完整的脚本:

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

哪一行是'line 6'?请显示产生错误的完整实际代码,上面没有语法错误 - 尽管如果您想直接在字符串中使用关联数组值,则正确的语法是'“q1是{$ ARRAY ['q1'] }
“'。 – DaveRandom 2012-04-22 21:34:02

+0

通常,变量必须以“字母”或“_”字符开头,而不是数字。 – hjpotter92 2012-04-22 21:39:42

+0

我认为追逐死亡的评论实际上是最好的答案,尽管它不是答案,所以我不能这样标记它。我只是查了一下,它在PHP手册中说得非常清楚,你不能用一个数字来启动一个变量名。哎呀。 – niftyc 2012-04-22 21:54:28

回答

0

当在双引号字符串使用数组,如果PHP看到阵列密钥启动与一号码,它假定整个键是数字索引,例如

echo "$arr[123abc]"; 

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

要解决这个问题,你将不得不使用

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

与正确引用数组索引

3

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

不管怎样,你不应该像这样在字符串中嵌入数组。使用下列中的一个:

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

有趣的是,我不会认为这会导致一个分析错误,但[显然]它([http://codepad.org/wQ8LtA3w])。我会认为'$ ARRAY [1q]'会出现在字符串中,或​​者它会起作用。我想这就是为什么PHP的命名约定不允许在第一个字符位置的数字... – DaveRandom 2012-04-22 21:42:29

+0

DaveRandom,如果有帮助,这是一个完整的脚本: <?php $ ARRAY ['1q'] ='foo “; echo“1q is $ ARRAY [1q]
”; ?> – niftyc 2012-04-22 21:46:20

0

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

  • 你应该总是使用引号来访问字符串数组键,甚至在字符串内部。
  • 将字符串变量放在{}内是一种很好的做法。
相关问题