You need to enable JavaScript to run this app. PHP遍历CURL获取的JSON物流数据 无法读取events字段如何处理
优惠活动
大模型
产品
解决方案
定价
更多

PHP遍历CURL获取的JSON物流数据 无法读取events字段如何处理

问题根源
  • 遍历逻辑和数据结构完全错位:$data['data'] 是单个运单的完整数据对象,不是多运单组成的列表数组,直接对它做foreach会逐个遍历它的顶层属性(awbNo、carrierName、allData、events),根本不是你预期的「遍历每条运单」的效果
  • events 是二维数组(每个元素对应一条物流轨迹),PHP不能直接echo输出数组,会触发「Array to string conversion」错误,完全打不出轨迹内容
  • 漏处理了嵌套在allData里的运单核心字段,比如预计送达时间、更新时间、是否取消等信息

修正后可直接运行的代码

代码做了单/多运单结构兼容,不管接口返回单个运单还是多个运单的列表都能正常渲染:

<?php
// 自动判断返回的data结构,兼容单运单/多运单列表场景
$waybillList = isset($data['data'][0]) ? $data['data'] : [$data['data']];
?>
<table>
  <?php foreach ($waybillList as $row) { ?>
  <tr>
    <!-- 运单基础信息区 -->
    <td>
      <div>运单号:<?php echo htmlspecialchars($row['awbNo'] ?? '-'); ?></div>
      <div>承运商:<?php echo htmlspecialchars($row['carrierName'] ?? '-'); ?></div>
      <?php $extra = $row['allData'] ?? []; ?>
      <div>是否取消:<?php echo !empty($extra['cancelled']) ? '是' : '否'; ?></div>
      <div>
        预计送达时间:
        <?php 
        echo !empty($extra['expectedDeliveryDate']) 
          ? date('Y-m-d H:i', strtotime($extra['expectedDeliveryDate'])) 
          : '-'; 
        ?>
      </div>
      <div>
        最后更新时间:
        <?php 
        echo !empty($extra['updated']) 
          ? date('Y-m-d H:i', strtotime($extra['updated'])) 
          : '-'; 
        ?>
      </div>
    </td>
    <!-- 物流轨迹区:单独循环遍历events数组 -->
    <td>
      <?php if (!empty($row['events'])) { ?>
        <ul style="margin:0;padding-left:16px;">
          <?php foreach ($row['events'] as $track) { ?>
          <li>
            <div>时间:<?php echo date('Y-m-d H:i', strtotime($track['Time'])); ?></div>
            <div>地点:<?php echo htmlspecialchars($track['Location'] ?? '未知地点'); ?></div>
            <div>状态:<?php echo htmlspecialchars($track['Remarks'] ?? '无备注'); ?></div>
            <hr style="margin:4px 0;">
          </li>
          <?php } ?>
        </ul>
      <?php } else {
        echo '暂无物流轨迹信息';
      } ?>
    </td>
  </tr>
  <?php } ?>
</table>

关键调整说明
  • 加了结构兼容判断:自动识别单运单/多运单列表格式,避免遍历错位
  • 嵌套数组单独循环:对events二维数组逐行遍历,把每条轨迹的时间、地点、备注单独渲染,解决数组无法直接echo的问题
  • 空值兜底:所有可能为null的字段(比如轨迹里的Location)都加了默认值,避免输出空报错
  • 时间格式转换:把接口返回的ISO格式时间转成国内常规可读的年-月-日 时:分格式
  • 信息补全:把嵌套在allData里的预计送达、取消状态、更新时间等核心运单字段全部提取输出
  • 加了htmlspecialchars转义:避免接口返回的特殊字符打乱页面HTML结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.13 00:45:07