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

PHP遍历数组时如何生成含嵌套fields数组的目标JSON

解决PHP遍历数组生成嵌套fields JSON数组的问题

我看出来你的问题啦——当前代码每次处理fields.开头的键时,都是直接覆盖掉整个$request['fields']数组,所以最后只会剩下最后一个字段。咱们只需要调整数组赋值的逻辑,从替换改成追加,再加上必要的初始化就能搞定!

修改后的完整代码

// 示例原始数据,可替换为你的实际$address_data
$address_data = [
    [
        'campaignId' => '18210f12-502c-4d71-a098-4f595304a8d0',
        'fields.CPLastName' => 'Voornaam 1',
        'fields.CPFirstname' => 'Achternaam 1',
        'fields.OROrganisation' => 'Bedrijf 1'
    ],
    [
        'campaignId' => '18210f12-502c-4d71-a098-4f595304a8d0',
        'fields.CPLastName' => 'Voornaam 2',
        'fields.CPFirstname' => 'Achternaam 2',
        'fields.OROrganisation' => 'Bedrijf 2'
    ]
];

foreach($address_data as $address) {
    // 每次处理新地址时重置request,避免残留上一次的数据
    $request = [
        'campaignId' => '',
        'fields' => []
    ];
    
    foreach($address as $key => $value){
        if($key == 'campaignId') {
            $request[$key] = $value;
        }
        // 精准匹配以fields.开头的键,避免误匹配
        if (strpos($key, 'fields.') === 0) {
            $fields = explode('.', $key);
            // 核心修改:用[]追加元素,而非替换整个数组
            $request['fields'][] = [
                'fieldId' => $fields[1],
                'value' => $value
            ];
        }
    }
    // 输出格式化后的JSON,和你期望的格式一致
    echo json_encode($request, JSON_PRETTY_PRINT) . PHP_EOL;
}

关键修改点说明

  1. 初始化request数组:每次遍历单个地址前,重新初始化$request,确保每个地址的字段都是独立的,不会携带上一次循环的残留数据。
  2. 追加fields元素:把原来的$request['fields'] = array(...)改成$request['fields'][] = array(...),这样会把每个fields.开头的键值对作为新对象追加到fields数组中,而不是覆盖整个数组。
  3. 精准匹配键名:将strpos($key, 'fields')改为strpos($key, 'fields.') === 0,确保只匹配以fields.开头的键,避免误处理类似fields_test这种不符合格式的键。
  4. 格式化JSON输出:添加JSON_PRETTY_PRINT参数,让输出的JSON自动换行缩进,和你期望的目标格式完全一致(如果不需要格式化,可以去掉这个参数)。

最终输出结果

运行后会生成你想要的JSON格式:

{
    "campaignId": "18210f12-502c-4d71-a098-4f595304a8d0",
    "fields": [
        {
            "fieldId": "CPLastName",
            "value": "Voornaam 1"
        },
        {
            "fieldId": "CPFirstname",
            "value": "Achternaam 1"
        },
        {
            "fieldId": "OROrganisation",
            "value": "Bedrijf 1"
        }
    ]
}
{
    "campaignId": "18210f12-502c-4d71-a098-4f595304a8d0",
    "fields": [
        {
            "fieldId": "CPLastName",
            "value": "Voornaam 2"
        },
        {
            "fieldId": "CPFirstname",
            "value": "Achternaam 2"
        },
        {
            "fieldId": "OROrganisation",
            "value": "Bedrijf 2"
        }
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:07