PHP字符串嵌入foreach循环报错:意外'foreach'(T_FOREACH)语法错误
修复PHP foreach语法错误:Parse error: unexpected 'foreach' (T_FOREACH)
嘿,我一眼就揪出问题啦——你直接把foreach循环嵌在字符串拼接里了,PHP可不吃这一套!foreach是控制流语句,不能像变量那样直接插在字符串中间,这就是触发那个语法错误的原因。
咱们得把循环逻辑和字符串拼接分开处理,下面给你两种修复方案,第二种更推荐哦:
方案1:拆分字符串与循环(手动拼接)
先把JSON里固定的cols部分单独拎出来,再通过循环生成rows的内容,最后组合成完整字符串,还要注意处理循环末尾多余的逗号:
$pdo = new PDO('mysql:host=localhost;dbname=center24', 'root', ''); $sql = "SELECT `Name`, `SP`, `NP`, `PP` FROM `mitarbeiter punkte`"; // 先定义JSON的cols固定结构 $colsPart = '{ "cols": [ {"id":"","label":"Points","pattern":"","type":"string"}, {"id":"","label":"Start Punkte","pattern":"","type":"number"}, {"id":"","label":"Negative Punkte","pattern":"","type":"number"}, {"id":"","label":"Positive Punkte","pattern":"","type":"number"} ], "rows": ['; // 初始化rows内容为空字符串 $rowsContent = ''; foreach ($pdo->query($sql) as $row) { // 拼接每一行的JSON结构 $rowsContent .= ' {"c":[{"v":"'.$row['Name'].'","f":null},{"v":'.$row['SP'].',"f":null},{"v":-'.$row['NP'].',"f":null},{"v":'.$row['PP'].',"f":null}]}, '; } // 移除最后多余的逗号和空格,避免JSON格式错误 $rowsContent = rtrim($rowsContent, ', '); // 组合成完整的JSON字符串 $string = $colsPart . $rowsContent . ' ] }'; echo $string;
方案2:用json_encode自动生成JSON(更安全优雅)
手动拼接字符串很容易踩坑(比如字段里有特殊字符时会破坏JSON结构),直接用PHP的json_encode函数来生成JSON才是更稳妥的做法:
$pdo = new PDO('mysql:host=localhost;dbname=center24', 'root', ''); $sql = "SELECT `Name`, `SP`, `NP`, `PP` FROM `mitarbeiter punkte`"; // 定义cols的结构数组 $colsStructure = [ ["id"=>"","label"=>"Points","pattern"=>"","type"=>"string"], ["id"=>"","label"=>"Start Punkte","pattern"=>"","type"=>"number"], ["id"=>"","label"=>"Negative Punkte","pattern"=>"","type"=>"number"], ["id"=>"","label"=>"Positive Punkte","pattern"=>"","type"=>"number"] ]; // 收集所有行的数据到数组中 $rowsArray = []; foreach ($pdo->query($sql) as $row) { $rowsArray[] = [ "c" => [ ["v" => $row['Name'], "f" => null], ["v" => $row['SP'], "f" => null], ["v" => -$row['NP'], "f" => null], ["v" => $row['PP'], "f" => null] ] ]; } // 自动生成正确格式的JSON $jsonData = [ "cols" => $colsStructure, "rows" => $rowsArray ]; $string = json_encode($jsonData); echo $string;
这个方案不仅解决了语法错误,还能自动处理字符串转义、数字格式等问题,彻底避免手动拼接带来的潜在bug。
内容的提问来源于stack exchange,提问作者Kostja Wolf
相关产品推荐
相关产品推荐

