Php 从函数而不是回显返回内容

Php 从函数而不是回显返回内容,php,Php,我有一个递归函数: function displayTreeview($cats,$depth=0) { //if($depth==0){echo '<ul>';} foreach($cats as $cat) { $hasChildren=count($cat['children'])>0; $class = $hasChildren?' class="menu-i

我有一个递归函数:

    function displayTreeview($cats,$depth=0)
    {
        //if($depth==0){echo '<ul>';}
        foreach($cats as $cat)
        {
            $hasChildren=count($cat['children'])>0;
            $class = $hasChildren?' class="menu-item-has-children"':'';
            echo '<li'.$class.' data-children="'.count($cat['children']).'">'.$cat['name'];
            if($hasChildren){
             echo '<ul class="dropdown-menu sub-menu">';
             displayTreeview($cat['children'],$depth+1);echo '</ul>';}
             echo '</li>';
        }
        //if($depth==0){echo '</ul>';}
    }
函数displayTreeview($cats,$depth=0)
{
//如果($depth==0){echo'
    ';} foreach($cats作为$cat) { $haschilds=count($cat['children'])>0; $class=$hasChildren?'class=“菜单项有子项”:“”; 回显“”。$cat['name']; 如果(有子女){ echo'
      ; displayTreeview($cat['children',$depth+1);echo'
    ';} 回音“”; } //如果($depth==0){echo'
';} }

如何将所有html代码放入一个var并返回它?我尝试使用$var.=进行追加,但没有成功获得正确的代码。

只需将每个回音替换为字符串追加,例如:

function displayTreeview($cats,$depth=0)
    {
        //if($depth==0){echo '<ul>';}
        $stringBuilder = "";
        foreach($cats as $cat)
        {
            $hasChildren=count($cat['children'])>0;
            $class = $hasChildren?' class="menu-item-has-children"':'';
            $stringBuilder .= '<li'.$class.' data-children="'.count($cat['children']).'">'.$cat['name'];
            if($hasChildren){$stringBuilder .='<ul class="dropdown-menu sub-menu">';displayTreeview($cat['children'],$depth+1);$stringBuilder .= '</ul>';}
            $stringBuilder .= '</li>';
        }
        //if($depth==0){echo '</ul>';}
        return $stringBuilder ;
    }
函数displayTreeview($cats,$depth=0)
{
//如果($depth==0){echo'
    ';} $stringBuilder=“”; foreach($cats作为$cat) { $haschilds=count($cat['children'])>0; $class=$hasChildren?'class=“菜单项有子项”:“”; $stringBuilder.='.$cat['name']; 如果($hasChildren){$stringBuilder.='
      ';displayTreeview($cat['children',$depth+1);$stringBuilder.='
    ';} $stringBuilder.=''; } //如果($depth==0){echo'
';} 返回$stringBuilder; }
只需将每个回音替换为字符串附加,例如:

function displayTreeview($cats,$depth=0)
    {
        //if($depth==0){echo '<ul>';}
        $stringBuilder = "";
        foreach($cats as $cat)
        {
            $hasChildren=count($cat['children'])>0;
            $class = $hasChildren?' class="menu-item-has-children"':'';
            $stringBuilder .= '<li'.$class.' data-children="'.count($cat['children']).'">'.$cat['name'];
            if($hasChildren){$stringBuilder .='<ul class="dropdown-menu sub-menu">';displayTreeview($cat['children'],$depth+1);$stringBuilder .= '</ul>';}
            $stringBuilder .= '</li>';
        }
        //if($depth==0){echo '</ul>';}
        return $stringBuilder ;
    }
函数displayTreeview($cats,$depth=0)
{
//如果($depth==0){echo'
    ';} $stringBuilder=“”; foreach($cats作为$cat) { $haschilds=count($cat['children'])>0; $class=$hasChildren?'class=“菜单项有子项”:“”; $stringBuilder.='.$cat['name']; 如果($hasChildren){$stringBuilder.='
      ';displayTreeview($cat['children',$depth+1);$stringBuilder.='
    ';} $stringBuilder.=''; } //如果($depth==0){echo'
';} 返回$stringBuilder; }
函数displayTreeview($cats,$depth=0,$stringBuilder)
{
$stringBuilder='';
//如果($depth==0){echo'
    ';} foreach($cats作为$cat) { $haschilds=count($cat['children'])>0; $class=$hasChildren?'class=“菜单项有子项”:“”; $stringBuilder.='.$cat['name']; 如果(有子女){ $stringBuilder.='
      ; $stringBuilder.=displayTreeview($cat['children',$depth+1,$stringBuilder); $stringBuilder.='
    '; } $stringBuilder.=''; } //如果($depth==0){echo'
';} 返回$stringBuilder; }
注意
$stringBuilder=''在开头(在注释条件之前)。你需要在这里有这个,然后在循环中附加到它。按照您的方式,变量在循环的每次运行时都会被重置。

函数displayTreeview($cats,$depth=0,$stringBuilder)
{
$stringBuilder='';
//如果($depth==0){echo'
    ';} foreach($cats作为$cat) { $haschilds=count($cat['children'])>0; $class=$hasChildren?'class=“菜单项有子项”:“”; $stringBuilder.='.$cat['name']; 如果(有子女){ $stringBuilder.='
      ; $stringBuilder.=displayTreeview($cat['children',$depth+1,$stringBuilder); $stringBuilder.='
    '; } $stringBuilder.=''; } //如果($depth==0){echo'
';} 返回$stringBuilder; }

注意
$stringBuilder=''在开头(在注释条件之前)。你需要在这里有这个,然后在循环中附加到它。按照您的方式,变量在循环的每次运行时都会被重置。

您是否仍有添加了·的版本?因为你就是这样做的。在begginig,创建一个空变量,然后在每个循环中,将代码附加到它,然后在循环结束后返回它。^再好不过了。它不工作,只附加函数的第一次运行,但当go recursive不再附加时。@IonVasile更正,我没有正确查看代码,这很容易解决。您的函数现在返回了一些东西,甚至它的递归调用也会返回,所以只需附加它返回的内容即可。知道了?当递归调用发生时,您需要执行
$variable.=displayTreeview(…)只在那里?还是那里和每一个回声?因为我已经试过了…你还有附加到变量的版本吗?因为你就是这样做的。在begginig,创建一个空变量,然后在每个循环中,将代码附加到它,然后在循环结束后返回它。^再好不过了。它不工作,只附加函数的第一次运行,但当go recursive不再附加时。@IonVasile更正,我没有正确查看代码,这很容易解决。您的函数现在返回了一些东西,甚至它的递归调用也会返回,所以只需附加它返回的内容即可。知道了?当递归调用发生时,您需要执行
$variable.=displayTreeview(…)只在那里?还是那里和每一个回声?因为我已经试过了…这段代码只显示一次函数调用,正如您看到的函数是递归的。这段代码只显示一次函数调用,正如您看到的函数是递归的。因为您正在函数中重新初始化
$stringBuilder
,将其作为参数传递没有意义。因为您正在函数中重新初始化
$stringBuilder
,所以将其作为参数传递没有意义。