【问题标题】:Recursive function issue in PHPPHP中的递归函数问题
【发布时间】:2012-11-22 18:09:32
【问题描述】:

我把下面的函数放在一个类中

我尝试在这个函数内部再次调用它(我在这个函数内部进行了递归调用$this->buildMenu($this->itemId, $menuData);

只有在没有递归调用的情况下这个函数才有效,否则它不会返回任何值。

// menu builder function, parent_id 0 is the root 
function buildMenu($parent_id, $menuData)
{       
    $this->html = ''; 
    if (isset($menuData['parents'][$parent_id])) 
    { 
        if($parent_id=='0') $this->html = '<ul class="menu responsive-menu sf-js-enabled">';
        else $this->html = '<ul>';
        foreach ($menuData['parents'][$parent_id] as $this->itemId) 
        { 
            if($this->itemId=='1'){$this->html .= '<li><a href="'.PATH.'">' . $menuData['items'][$this->itemId]['menu_name'].'</a>';}
            else $this->html .= '<li class=""><a href="?action='. md5($menuData['items'][$this->itemId]['menu_link']).'">' . $menuData['items'][$this->itemId]['menu_name'].'</a>';
            $this->html .= $this->buildMenu($this->itemId, $menuData); 
            $this->html .= '</li>'; 
        } 
        $this->html .= '</ul>'; 
    } 

    return $this->html;
}

【问题讨论】:

  • 看起来$this-&gt;itemId 的值根本没有改变

标签: php function recursion


【解决方案1】:

问题可能出在$this-&gt;html = '';
$html 似乎是一个类变量,所以每次递归调用该函数,你将它初始化为一个空字符串。
尝试将其用作局部函数变量。

【讨论】:

    【解决方案2】:

    首先,将$this-&gt;html 替换为$html:你在递归时用一个空字符串来限制它的值,我猜这不是你想要的。

    【讨论】:

    • 非常感谢朋友,你是绝对正确的。它按我预期的那样完美运行。
    猜你喜欢
    • 2017-10-18
    • 2015-02-04
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多