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

PHP多维数组扁平化拼接:如何去除多余数字键?

PHP嵌套数组扁平化去除多余数字键的解决方案

要解决扁平化后出现多余数字键的问题,核心是只收集数组的叶子节点值,不保留原嵌套数组的任何键,以下是两种可靠的实现方式:

方法一:递归遍历收集值

通过递归遍历数组,遇到非数组元素时直接追加到结果数组(用[]自动生成连续索引),遇到子数组则递归处理后合并结果:

function flattenArray($array) {
    $result = [];
    foreach ($array as $value) {
        if (is_array($value)) {
            // 合并递归返回的扁平化数组,array_merge会重新索引数字键
            $result = array_merge($result, flattenArray($value));
        } else {
            // 直接追加值,自动生成连续索引
            $result[] = $value;
        }
    }
    return $result;
}

方法二:使用内置函数array_walk_recursive

PHP内置的array_walk_recursive会自动遍历所有嵌套的叶子节点(非数组元素),我们只需在回调中收集这些值即可:

function flattenArray($array) {
    $result = [];
    array_walk_recursive($array, function($item) use (&$result) {
        $result[] = $item;
    });
    return $result;
}

问题原因说明

你之前的函数出现多余数字键,通常是因为:

  • 使用了$result[$key] = $value这类保留原键的赋值方式,导致结果数组保留了原嵌套数组的数字索引
  • 用+=运算符合并数组(它会保留左侧数组的键,右侧同数字键的元素会被忽略)
  • 递归合并时未使用array_merge重新索引,导致结果数组的数字键不连续

示例验证

假设输入嵌套数组:

$input = [
    'apple',
    ['banana', 'cherry', ['date', 'elderberry']],
    'fig',
    ['grape']
];

调用上述函数后,输出结果为纯值的连续索引数组:

['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:22:40