Php 意外的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

我在这行收到“语法错误,意外的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 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解释了如何和为什么,以及链接-都帮助我理解。