Php 解析错误似乎取决于数组索引的名称
我是PHP新手。当我使用“echo”打印数组元素时,我的成功似乎取决于我对索引的命名。那不可能是对的,对吧?!我觉得我快要发疯了。此代码:Php 解析错误似乎取决于数组索引的名称,php,string,echo,associative-array,Php,String,Echo,Associative Array,我是PHP新手。当我使用“echo”打印数组元素时,我的成功似乎取决于我对索引的命名。那不可能是对的,对吧?!我觉得我快要发疯了。此代码: $ARRAY['q1'] = 'foo'; echo "q1 is $ARRAY[q1]<br>"; $ARRAY['q1']='foo'; echo“q1是$ARRAY[q1]”; 很好。但是这个代码: $ARRAY['1q'] = 'foo'; echo "1q is $ARRAY[1q]<br>"; $ARRAY['1q'
$ARRAY['q1'] = 'foo';
echo "q1 is $ARRAY[q1]<br>";
$ARRAY['q1']='foo';
echo“q1是$ARRAY[q1]
”;
很好。但是这个代码:
$ARRAY['1q'] = 'foo';
echo "1q is $ARRAY[1q]<br>";
$ARRAY['1q']='foo';
echo“1q是$ARRAY[1q]
”;
产生错误:
分析错误:语法错误,意外的T_字符串,第6行的/var/www/html/test.php中应为']'
我知道我可以纠正这样的问题:
echo "1q is " . $ARRAY['1q'] . "<br>";
echo“1q是”$数组['1q']。“
”;
但我的问题是,为什么数组索引“1q”与“q1”在第一个代码块中很重要?我甚至检查1q是否是某种常数,但它似乎不是。这是在字符串中插入数组元素的不正确方法吗?(我从PHP文档中复制了它。)
这是在PHP5.3.8中实现的。我真的很感谢你的帮助
编辑:
好的,我从PHP手册的这一页的示例8中得到了这个echo语法:显然这不是正确的方法。我将在手册中添加一个用户提供的注释
产生此错误的整个脚本将是:
<?php
$ARRAY['1q'] = 'foo';
echo "1q is $ARRAY[1q]<br>";
?>
因为它试图将数组键视为某种文字。对于
q1
这是有效的,因为没有名为q1
的常量,所以PHP假定它是字符串<但是,code>1q失败,因为它开始将其视为一个数字
无论如何,不应该在字符串中嵌入数组。使用以下选项之一:
echo "1q is {$ARRAY['1q']}";
echo "1q is ".$ARRAY['1q'];
因为它试图将数组键视为某种文字。对于
q1
这是有效的,因为没有名为q1
的常量,所以PHP假定它是字符串<但是,code>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是{$ARRAY['1q]'}
”;
^ ^ ^^
当在双引号字符串中使用数组时,如果PHP看到数组键以数字开头,它会假定整个键是数字索引,例如
echo "$arr[123abc]";
被解释为$arr[123]
。abc
部分是产生预期字符串错误的部分,因为数字键不能包含非数字成分
要解决此问题,您必须使用
echo "1q is {$ARRAY['1q]'}<br>";
^ ^ ^^
echo“1q是{$ARRAY['1q]'}
”;
^ ^ ^^
使用正确引用的数组索引时,不需要连接。尝试
echo“1q是{$ARRAY['1q']}”代码>
- 您应该始终使用引号来访问字符串数组键,即使是在字符串内部
- 在字符串中包含{}上的变量是一个很好的实践
您不需要连接。尝试
echo“1q是{$ARRAY['1q']}”代码>
- 您应该始终使用引号来访问字符串数组键,即使是在字符串内部
- 在字符串中包含{}上的变量是一个很好的实践
哪一行是第6行?请显示产生错误的完整实际代码,上面没有语法错误-尽管如果要在字符串中直接使用关联数组值,正确的语法是“q1是{$array['q1']}
”
。通常,变量必须以字母表
或字符开头,不是数字。我认为追逐死亡的评论实际上是最好的答案,虽然它不是一个答案,所以我不能这样标记。我只是查了一下,它在PHP手册中非常清楚地说,变量名不能以数字开头。哎呀,哪一行是第6行?请显示产生错误的完整实际代码,上面没有语法错误-尽管如果要在字符串中直接使用关联数组值,正确的语法是“q1是{$array['q1']}
”
。通常,变量必须以字母表
或字符开头,不是数字。我认为追逐死亡的评论实际上是最好的答案,虽然它不是一个答案,所以我不能这样标记。我只是查了一下,它在PHP手册中非常清楚地说,变量名不能以数字开头。哦,有趣的是,我没想到这会导致一个解析错误,但是它。我本以为$ARRAY[1q]
会出现在字符串中,或者它会工作。我想这就是PHP命名约定不允许在第一个字符位置使用数字的原因……DaveRandom,如果有帮助的话,这里有一个完整的脚本:有趣的是,我没想到这会导致解析错误,但它确实存在。我本以为$ARRAY[1q]
会出现在字符串中,或者它会工作。我想这就是PHP命名约定不允许在第一个字符位置使用数字的原因……DaveRandom,如果有帮助的话,这里有一个完整的脚本: