Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解析错误似乎取决于数组索引的名称_Php_String_Echo_Associative Array - Fatal编程技术网

Php 解析错误似乎取决于数组索引的名称

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'

我是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']='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,如果有帮助的话,这里有一个完整的脚本: