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

PHP遍历JSON多维数组提取expiry数据失败,求解决方法

解决PHP遍历JSON多维数组(含混合类型字段)的问题

问题核心

现有代码仅处理了list数组的第一个元素,且未适配expiry字段既为数组又为单个对象的混合类型情况,导致数据提取不全。需要遍历全部list条目,并统一处理expiry的两种类型。

最终解决方案代码

// 读取JSON文件并解析为对象
$json_data = json_decode(file_get_contents('data.json'));

// 遍历list中的每一条数据
foreach ($json_data->list as $index => $item) {
    // 输出Modal与Variation(匹配期望的加粗格式)
    echo '<tr><td><strong>Modal</strong></td><td><strong>' . $item->mode . '</strong></td></tr>';
    echo '<tr><td><strong>Variation</strong></td><td><strong>' . $item->change . '</strong></td></tr>';
    
    // 统一expiry格式:单个对象转为数组,确保遍历逻辑一致
    $expiryItems = is_array($item->expiry) ? $item->expiry : [$item->expiry];
    
    // 遍历所有expiry数据
    foreach ($expiryItems as $expiry) {
        echo '<tr><td>Due date</td><td>' . $expiry->cdexpiry . '</td></tr>';
        echo '<tr><td>Value</td><td>' . $expiry->vlexpiry . '</td></tr>';
    }
    
    // 非最后一条数据时输出分隔线
    if ($index < count($json_data->list) - 1) {
        echo '<tr><td><strong>---</strong></td><td><strong>---</strong></td></tr>';
    }
}

代码关键说明

  1. 全量遍历list:通过foreach循环覆盖list数组的所有条目,避免仅处理第一个元素的问题
  2. 统一类型处理:用is_array()判断expiry类型,将单个对象转为包含该对象的数组,让后续遍历逻辑无需区分类型
  3. 格式匹配期望输出:按照需求的HTML表格行格式输出内容,加粗关键字段
  4. 分隔线控制:仅在非末尾条目后添加分隔线,避免多余的尾部分隔

对应期望输出(表格格式)

TypeValue
Modal0401
VariationN
Due datev130
Value33528.99
Due datev230
Value21648.39
Due datev150
Value185350.30
------
Modal1904
VariationN
Due datev40
Value1091.46
------
Modal1904
VariationN
Due datev770
Value1001.56
------
Modal0213
VariationN
Due datev130
Value2084.08
Due datev260
Value28362.31
------
Modal0101
VariationN
Due datev210
Value296.78
------
Modal0217
VariationN
Due datev245
Value1495.37
Due datev248
Value1440.37

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:20:32