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

PHP如何将任意维度多维数组的端点转换为完整路径行

问题原因

你代码的核心问题是路径字符串$str在同层foreach循环中被全局累加,遍历完第一个子元素后路径不会回退,导致同层后续子元素的路径会带上之前遍历过的兄弟节点的键,出现路径叠加错误。


修复方案一(最小改动适配原有逻辑)

仅调整路径生成逻辑,调用方式和你原有写法完全一致:

function array2Rows($arr, $str = '', $out = '') {
    if (is_array($arr)) {
        foreach ($arr as $att => $arr1) {
            // 每次遍历生成独立的当前路径,不修改原$str,避免影响同层其他元素
            $currentStr = $str . (strlen($str) ? ',' : '') . $att;
            $out = array2Rows($arr1, $currentStr, $out);
        }
    } else {
        $str .= (strlen($str) ? ',' : '') . $arr;
        $out .= (strlen($out) ? '<br />' : '') . $str;
    }
    return $out;
}

优化方案(返回数组适配更多场景)

该版本返回路径数组,支持自定义分隔符,方便后续对单条路径做额外处理:

function array2Rows($arr, array $path = [], string $delimiter = ','): array
{
    $result = [];
    foreach ($arr as $key => $value) {
        $currentPath = array_merge($path, [$key]);
        if (is_array($value)) {
            $result = array_merge($result, array2Rows($value, $currentPath, $delimiter));
            continue;
        }
        // 到达端点,拼接值到路径后转字符串
        $currentPath[] = $value;
        $result[] = implode($delimiter, $currentPath);
    }
    return $result;
}

调用示例:

// 调用获取路径数组
$rows = array2Rows($arr);
// 输出时拼接换行即可
echo '<p>' . implode('<br />', $rows) . '</p>';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:04