Php 意外的T_字符串?
我在这行收到“语法错误,意外的T_字符串”,无法找到罪犯。搜索了谷歌,这个论坛等,但仍然卡住了Php 意外的T_字符串?,php,foreach,Php,Foreach,我在这行收到“语法错误,意外的T_字符串”,无法找到罪犯。搜索了谷歌,这个论坛等,但仍然卡住了 foreach($result in $results){ 在该区块中: <?php $results = mysql_fetch_array($row_rsCategories); $filters = array(); foreach($result in $results){ // assuming each result has an array of filte
foreach($result in $results){
在该区块中:
<?php
$results = mysql_fetch_array($row_rsCategories);
$filters = array();
foreach($result in $results){
// assuming each result has an array of filters
$filters = array_merge($filters, $result['filter']);
}
$filters = array_unique($filters);
$csFilters = implode(',',$filters);
?>
我错过了什么
$results mysql_fetch_array($row_rsCategories);
缺少分配的=
。PHP,以其无穷的智慧
缺少分配的
=
。PHP以其无穷的智慧,在PHP中,foreach的工作方式是相反的。它是
foreach ($results as $result) //...
PHP中的foreach
。它是
foreach ($results as $result) //...
第一行$results之后缺少相等(=)运算符
应该是
<?php
$results = mysql_fetch_array($row_rsCategories);
$filters = array();
foreach($results as $result){
// assuming each result has an array of filters
$filters = array_merge($filters, $result['filter']);
}
$filters = array_unique($filters);
$csFilters = implode(',',$filters);
?>
在foreach语句中也将“in”替换为“as”。在第一行的$results之后缺少equal(=)运算符
应该是
<?php
$results = mysql_fetch_array($row_rsCategories);
$filters = array();
foreach($results as $result){
// assuming each result has an array of filters
$filters = array_merge($filters, $result['filter']);
}
$filters = array_unique($filters);
$csFilters = implode(',',$filters);
?>
在foreach语句中也将“in”替换为“as”。PHP中的“意外字符串”错误很奇怪。它们通常不会实际指示代码中的字符串
这是因为PHP处理常量的方式<例如,code>FOOBAR
可以是一个常量,任何不代表其他内容的字母序列(如类名或关键字)也可以是常量。但是,如果尚未定义,PHP将其视为字符串'FOOBAR'
。这是愚蠢的行为,但我们要做的就是这样。这就是你的PHP
出现此错误的原因是中的不是关键字(请参阅手册中的)。它也不是一个类名(尽管可能是)。它在PHP中没有固有的意义。因此PHP看到了它,并认为“啊哈,您显然希望字符串'in'
”,因此您的代码实际上如下所示:
foreach($result 'in' $results){
PHP现在说,“哦,但是这里不能有字符串!”这显然是正确的。然而,不明显的是,为什么PHP的设计者认为此时最有用的消息是说有一个意外的字符串。非常误导
但是,正如其他地方指出的,问题在于您正在尝试执行Javascript循环:
for (result in results) {
您的目标是实现PHP循环:
foreach ($results as $result) {
PHP中的“意外字符串”错误很奇怪。它们通常不会实际指示代码中的字符串
这是因为PHP处理常量的方式<例如,code>FOOBAR
可以是一个常量,任何不代表其他内容的字母序列(如类名或关键字)也可以是常量。但是,如果尚未定义,PHP将其视为字符串'FOOBAR'
。这是愚蠢的行为,但我们要做的就是这样。这就是你的PHP
出现此错误的原因是中的不是关键字(请参阅手册中的)。它也不是一个类名(尽管可能是)。它在PHP中没有固有的意义。因此PHP看到了它,并认为“啊哈,您显然希望字符串'in'
”,因此您的代码实际上如下所示:
foreach($result 'in' $results){
PHP现在说,“哦,但是这里不能有字符串!”这显然是正确的。然而,不明显的是,为什么PHP的设计者认为此时最有用的消息是说有一个意外的字符串。非常误导
但是,正如其他地方指出的,问题在于您正在尝试执行Javascript循环:
for (result in results) {
您的目标是实现PHP循环:
foreach ($results as $result) {
修正了@minty,仍然有错误。@Gary:另一个是Johannes回答的foreach($results as$result)
,而不是for
。在我的回答中更正,感谢您指出这一点!实际上,它只是与PHPs标记器相关。解析脚本时,所有行首先被拆分为标记。有多种类型——这些类型是PHP发现语法错误时出现在错误消息中的类型。其中一种类型是T_字符串。它匹配任何其他类型未匹配的所有内容-这就是大多数语法错误指定该类型的原因。所以错误消息告诉你的是:“呃,tokenizer在这里给了我一个T_字符串标记,但这没有任何意义。”是的,编写该tokenizer的人是懒惰的。很容易就会有不一样的东西。但是相反,他们认为这是一个壮举,并把它放在了规范中,所以没有人能摆脱它:DFixed@minty,仍然得到错误。@Gary:另一个是Johannes回答的foreach($results as$result)
,而不是for
。在我的回答中更正,感谢您指出这一点!实际上,它只是与PHPs标记器相关。解析脚本时,所有行首先被拆分为标记。有多种类型——这些类型是PHP发现语法错误时出现在错误消息中的类型。其中一种类型是T_字符串。它匹配任何其他类型未匹配的所有内容-这就是大多数语法错误指定该类型的原因。所以错误消息告诉你的是:“呃,tokenizer在这里给了我一个T_字符串标记,但这没有任何意义。”是的,编写该tokenizer的人是懒惰的。很容易就会有不一样的东西。但是,相反,他们认为这是一个专长,并把它放在规范中,所以没有人能摆脱它:DGreat输入,非常快,非常感谢大家!选择这一个,因为它解决了问题行-希望我可以接受多个!投入大,而且很快,谢谢大家!选择这一个,因为它解决了问题行-希望我可以接受多个!感谢@lonesomeday解释了如何和为什么,以及链接-都帮助我理解。感谢@lonesomeday解释了如何和为什么,以及链接-都帮助我理解。