PHP 7中如何将多层嵌套子数组合并为单一数组?
解决PHP多层嵌套sub_option数组扁平化问题
核心解决方案:递归遍历处理
由于数组嵌套层级不固定,递归是最可靠的处理方式。以下函数可以将所有层级的sub_option子数组合并为一维数组,同时保留每个选项的非sub_option字段(若sub_option为NULL则保留):
function flattenOptions($options, &$result = []) { foreach ($options as $option) { // 复制当前选项并移除数组类型的sub_option $current = $option; if (isset($current['sub_option']) && is_array($current['sub_option'])) { unset($current['sub_option']); } $result[] = $current; // 递归处理子选项(仅当sub_option是数组时) if (isset($option['sub_option']) && is_array($option['sub_option'])) { flattenOptions($option['sub_option'], $result); } } return $result; }
使用示例
将你的原始数组传入函数即可得到期望的一维数组:
// 原始嵌套数组 $originalArray = [ [ 'price' => 100, 'weight' => 42, 'sub_option' => [ [ 'price' => 25.99, 'points' => 32, 'sub_option' => [ [ 'price' => 27.99, 'weight' => 83, 'sub_option' => [ [ 'price' => 14.99, 'weight' => 50, 'sub_option' => NULL ] ] ] ] ], [ 'price' => 24.99, 'weight' => 25, 'sub_option' => NULL ] ] ], [ 'price' => 100, 'weight' => 4233, 'sub_option' => NULL ] ]; // 生成扁平化数组 $flattenedArray = flattenOptions($originalArray); print_r($flattenedArray);
输出结果与你期望的完全一致。
原代码问题分析
你之前的循环代码仅处理了两层嵌套,没有递归处理更深层级的sub_option,且每次内层循环会覆盖$arr2变量,最终仅将最后一个子选项与父选项合并,无法遍历所有嵌套层级。
内容的提问来源于stack exchange,提问作者Emir Aslan
相关产品推荐
相关产品推荐

