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

为什么我写的这个PHP递归遍历多维数组的函数无法正常工作?

问题原因
  • PHP函数参数默认采用传值传递规则,递归调用LOP($fieldValue, $txt)时传入的是当前$txt变量的副本,递归内部对$txt的修改仅作用于局部作用域,无法回传到上层函数的$txt变量中。
  • 现有代码没有接收递归调用的返回值,深层遍历生成的文本内容没有被追加到当前层级的拼接结果里,最终只能返回第一级非数组节点的拼接内容。
修复方案

方案一:接收递归返回值(无副作用,推荐)

修改递归调用行,将递归生成的内容追加到当前$txt变量即可,无需改动其他逻辑:

function LOP($arrayItself, $txt){
    foreach($arrayItself as $fieldName=>$fieldValue){       
            if(is_array($fieldValue)){
                    // 接收递归返回的内容,追加到当前拼接结果
                    $txt = LOP($fieldValue, $txt);
            }
            else {
                    $txt .= "<$fieldName>  $fieldValue  </$fieldName>";
            }
    }
    return $txt;
}

方案二:引用传递$txt参数

给$txt参数加上引用标记&,让所有层级的函数操作都指向同一个文本变量:

function LOP($arrayItself, &$txt){
    foreach($arrayItself as $fieldName=>$fieldValue){       
            if(is_array($fieldValue)){
                    LOP($fieldValue, $txt);
            }
            else {
                    $txt .= "<$fieldName>  $fieldValue  </$fieldName>";
            }
    }
    return $txt;
}

注意:该方案会直接修改外部传入的$txt原始变量,如果不希望影响外部变量优先选择方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:48:03