PHP如何遍历接口返回的JSON数据提取订单各字段值?
错误原因分析
- 遍历对象错误:你当前循环的是接口返回的整个根JSON数组,根数组包含
error、message、orders三个顶级字段,并非订单列表本身,所有订单数据都存储在$json['orders']字段中 - 取值逻辑错误:代码中
$val['orders'][0]['oid']只会固定取订单列表的第一条数据,无法遍历全部订单;同时$val['total_amount']的取值层级错误,该字段属于每个订单的子属性,不存在于根级字段下 - 缺少必要校验:没有判断接口返回的请求状态
error字段,也没有提前判断orders字段是否存在,容易触发PHP报错
修正后的可运行代码
$getOrdersUrl = file_get_contents("https://apiurl?last_id=504"); $json = json_decode($getOrdersUrl, true); // 先校验接口返回状态正常、订单数据非空 if (!empty($json) && empty($json['error']) && !empty($json['orders'])) { // 直接遍历订单列表字段 foreach ($json['orders'] as $order) { $oid = $order['oid']; $uid = $order['uid']; $total_amount = $order['total_amount']; // 这里可以替换为你自己的业务逻辑,示例输出三个字段 echo "订单ID:{$oid},用户ID:{$uid},订单金额:{$total_amount}<br>"; } } else { echo "暂无可用订单数据<br>"; }
逻辑说明
- 新增了接口请求状态判断,只有请求成功且有订单数据时才会进入遍历逻辑,避免异常报错
- 直接遍历
$json['orders']订单数组,所有订单都会被循环处理 - 每个订单的字段都从当前循环的订单子项中直接取值,层级正确不会出现取不到值的问题
内容的提问来源于stack exchange,提问作者winfred adrah
相关产品推荐
相关产品推荐

