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

如何用foreach从PHP多维数组创建变量并获取嵌套数组数据

解决多维数组中嵌套字段的访问问题

看起来你已经能获取到车辆的基础信息,但卡在了嵌套的motTests数组上。问题出在你没有正确遍历这个嵌套数组,而且现有代码里的foreach循环是空的,后续打印操作也不在循环范围内,这会导致变量访问的问题。

修正后的代码示例

$response = curl_exec($cURL);
$result = json_decode($response, true);
// 外层数组是索引数组,第一个元素就是车辆的完整信息
foreach ($result as $vehicle) {
    // 获取基础字段
    $registration = $vehicle["registration"];
    $make = $vehicle["make"];
    $model = $vehicle["model"];
    $fuelType = $vehicle["fuelType"];
    $primaryColour = $vehicle["primaryColour"];
    
    // 打印基础信息(可选)
    print "车牌号: $registration<br>";
    print "品牌: $make<br>";
    print "型号: $model<br>";
    
    // 遍历嵌套的motTests数组
    if (isset($vehicle["motTests"]) && is_array($vehicle["motTests"])) {
        print "<h3>MOT检测记录:</h3>";
        foreach ($vehicle["motTests"] as $test) {
            // 获取检测记录里的字段,用??处理字段不存在的情况
            $expiryDate = $test["expiryDate"] ?? "无有效期";
            $odometerValue = $test["odometerValue"] ?? "无里程数据";
            
            print "检测有效期: $expiryDate<br>";
            print "检测时里程: $odometerValue {$test["odometerUnit"]}<br><br>";
        }
    }
}
curl_close($cURL);

关键说明

  • 外层循环:$result是一个索引数组,第一个元素包含了车辆的所有信息(包括motTests),所以我们直接遍历$result拿到每一辆车的信息(这里看起来只有一辆)。
  • 嵌套循环处理motTests:motTests本身是一个数组,每个元素对应一次MOT检测记录,所以需要在车辆信息的循环内部,再嵌套一个foreach来遍历每一条检测记录。
  • 空值处理:使用??运算符可以避免字段不存在时出现报错,比如失败的检测记录可能没有expiryDate字段。
  • 变量作用域:确保所有的字段访问都在对应的循环范围内,之前你在循环外打印$value,虽然这里数组只有一个元素,但这不是规范写法,容易引发后续扩展问题。

这样修改后,你就能顺利获取到motTests里的expiryDate和odometerValue字段了。

内容的提问来源于stack exchange,提问作者Lbridgeman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:03:21