PHP报unexpected 'foreach'(T_FOREACH)语法错误原因排查
错误原因
抛出该语法错误的核心原因:PHP不支持在array()(或短数组语法[])的数组声明块内部直接嵌套foreach循环结构。
你的代码将foreach逻辑直接写在Passengers字段对应的数组声明括号内,PHP解析器会持续等待数组声明的闭合标识,中途识别到foreach关键字就会触发你看到的 unexpected 'foreach' (T_FOREACH), expecting ')' 报错。
除此之外原代码的循环逻辑本身也存在逻辑问题:循环内部定义的乘客数组没有被追加到任何目标数组中,即便绕过语法校验,也无法得到正确的乘客列表结构。
修复方案
不要把foreach循环嵌在数组声明内部,先单独循环组装好乘客列表数据,再将其赋值给最终数组的对应字段即可,修正后的可运行代码如下:
$rid = $request->input('result_id'); $passenger = Passenger::select('*')->where('result_id', $rid)->get(); // 提前初始化乘客列表数组,循环时逐行追加数据 $passengerList = array(); foreach ($passenger as $pax) { $passengerList[] = array( "Title" => $pax->title, "FirstName" => $pax->first_name, "LastName" => $pax->last_name, "PaxType" => $pax->pax_type ); } // 组装最终的提交数据 $booking_data = array( "SearchID" => $request->input('search_id'), "ResultID" => $request->input('result_id'), "Passengers" => $passengerList );
从代码的ORM调用、$request对象写法可以判断你使用的是Laravel框架,这种场景下可以直接用集合的
map方法简化代码,无需手动编写foreach循环:
$rid = $request->input('result_id'); $passenger = Passenger::select('*')->where('result_id', $rid)->get(); $booking_data = array( "SearchID" => $request->input('search_id'), "ResultID" => $request->input('result_id'), "Passengers" => $passenger->map(function($pax) { return array( "Title" => $pax->title, "FirstName" => $pax->first_name, "LastName" => $pax->last_name, "PaxType" => $pax->pax_type ); })->toArray() );
内容的提问来源于stack exchange,提问作者Noor Mohammad Babu
相关产品推荐
相关产品推荐

