如何用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
相关产品推荐
相关产品推荐

