You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:00:59