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

如何用explode将含_c_键的PHP数组拆分为父子结构?

问题:将扁平化PHP数组转换为父子结构数组

现有扁平化PHP数组:

array:4 [▼
  "pentrose_50_rafhan_c_kgs" => 100
  "pentrose_50_rafhan_c_issued_kgs" => 300
  "pentrose_50_rafhan_c_rskg" => 99.1
  "pentrose_50_rafhan_c_amount" => 29730
]

需要转换为以下父子结构数组:

array:1 [▼
    "pentrose_50_rafhan" => [
        "kgs" => 100
        "issued_kgs" => 300
        "rskg" => 99.1
        "amount" => 29730
    ]
]

已尝试的代码未达到预期:

foreach (array_combine($result, $filterred_chemical_keys) as $key => $chemical) {
    $arr = explode('_c_', $key);
    // dd($arr);
    $result[array_shift($arr)] = $arr;            
}

dd($result);

解决方案

你的代码问题在于直接修改遍历中的原数组,且拆分后错误地将子键数组直接赋值,没有关联对应的值。以下是正确实现:

// 创建新数组存储结构化结果
$structuredArray = [];

// 遍历原数组的每个键值对
foreach ($result as $key => $value) {
    // 按_c_拆分键为父键和子键
    $keyParts = explode('_c_', $key);
    
    // 确保拆分出有效结构(父键+子键)
    if (count($keyParts) === 2) {
        $parentKey = $keyParts[0];
        $childKey = $keyParts[1];
        
        // 将值放入对应父键的子数组中
        $structuredArray[$parentKey][$childKey] = $value;
        
        // 可选:删除原数组中的旧键,避免残留
        unset($result[$key]);
    }
}

// 将结构化后的数组合并到原数组(或直接使用$structuredArray)
$result = array_merge($result, $structuredArray);

dd($result);

代码说明:

  • 使用独立的$structuredArray构建目标结构,避免遍历原数组时修改原数组引发的遍历异常
  • 拆分键后验证结构有效性,确保每个键都能拆分为父键和子键两部分
  • 将原数组的值准确映射到新结构的对应位置
  • 可选删除原数组中的旧键,最后合并得到干净的目标数组

内容的提问来源于stack exchange,提问作者Muhammad Umair Ghaznavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:50:23