如何用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
相关产品推荐
相关产品推荐

