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
,所以将其作为参数传递没有意义。