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

PHP实现嵌套数组扁平化:将子数组合并至父级为独立节点

解决PHP嵌套数组扁平化问题

需求说明

需要将嵌套的PHP数组转换为所有目标子数组(包含drive和wheel_drive键的数组)处于同一层级的结构。

原输入数组

array(
    array(
        'drive' => array('test1'),
        'wheel_drive' => array('2WD','4WD')
    ),
    array(
        0 => array(
            'drive' => array('test21','test31'),
            'wheel_drive' => array('2WD','4WD')
        ),
        1 => array(
            'drive' => array('test32'),
            'wheel_drive' => array('4WD')
        )
    ),
    array(
        'drive' => array('test4'),
        'wheel_drive' => array('2WD','4WD')
    )
);

期望输出数组

array(
    array('drive' => array('test1'), 'wheel_drive' => array('2WD','4WD')),
    array('drive' => array('test21','test31'), 'wheel_drive' => array('2WD','4WD')),
    array('drive' => array('test32'), 'wheel_drive' => array('4WD')),
    array('drive' => array('test4'), 'wheel_drive' => array('2WD','4WD'))
);

现有代码问题

你提供的flattenArray函数逻辑偏离需求,它会将元素按传入的key分组合并,而非完整提取包含drive和wheel_drive的子数组结构,因此无法得到预期结果。

正确实现代码

function flattenNestedArrays($array) {
    $result = [];
    foreach ($array as $item) {
        // 判断当前项是否是需要保留的目标子数组
        if (is_array($item) && isset($item['drive']) && isset($item['wheel_drive'])) {
            $result[] = $item;
        } elseif (is_array($item)) {
            // 递归处理嵌套数组,合并结果
            $result = array_merge($result, flattenNestedArrays($item));
        }
    }
    return $result;
}

// 调用示例
$inputArray = array(
    array(
        'drive' => array('test1'),
        'wheel_drive' => array('2WD','4WD')
    ),
    array(
        0 => array(
            'drive' => array('test21','test31'),
            'wheel_drive' => array('2WD','4WD')
        ),
        1 => array(
            'drive' => array('test32'),
            'wheel_drive' => array('4WD')
        )
    ),
    array(
        'drive' => array('test4'),
        'wheel_drive' => array('2WD','4WD')
    )
);

$outputArray = flattenNestedArrays($inputArray);
print_r($outputArray);

代码逻辑说明

  1. 遍历输入数组的每个元素:
    • 如果当前元素是包含drive和wheel_drive的目标子数组,直接将其加入结果数组。
    • 如果当前元素是嵌套的普通数组,递归调用函数处理该子数组,并将返回的扁平化结果合并到主结果中。
  2. 最终返回的结果数组即为所有目标子数组处于同一层级的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:20:33