PHP递归树视图生成器仅从填充的“视图”中选择一个选项;精选;阵列?
我有一个主要工作的递归树视图生成器。给定一个父子数组,它可以将其正确输出为一个复选框字符串,然后通过CSS设置样式 它需要两个值。树数组和选定的数组。当它读取一个选定的值时,它会附加“checked”,但当它不读取时,会附加一个正常的复选框字符串 但是,一旦它附加了一个未选中的复选框,它就只能显示最后选定的值,并且似乎完全忘记了数组的其余部分PHP递归树视图生成器仅从填充的“视图”中选择一个选项;精选;阵列?,php,recursion,Php,Recursion,我有一个主要工作的递归树视图生成器。给定一个父子数组,它可以将其正确输出为一个复选框字符串,然后通过CSS设置样式 它需要两个值。树数组和选定的数组。当它读取一个选定的值时,它会附加“checked”,但当它不读取时,会附加一个正常的复选框字符串 但是,一旦它附加了一个未选中的复选框,它就只能显示最后选定的值,并且似乎完全忘记了数组的其余部分 public function genTree($tree, $selectedValues = [1,2,3,4]) { $output = '
public function genTree($tree, $selectedValues = [1,2,3,4])
{
$output = '<ul class="treeview">';
foreach($tree as $arr)
{
$output .= '<li>';
foreach($selectedValues as $num)
{
if ($num == $arr['id'])
{
$output .= '<input checked type="checkbox" id="'.$arr['name'].'" name="selected[]" value="'.$arr['id'].'"></input>';
} else {
$output .= '<input type="checkbox" id="'.$arr['name'].'" name="selected[]" value="'.$arr['id'].'"></input>';
}
}
$output .= '<label for"'.$arr['name'].'">'.ucfirst($arr['name']).'</label>';
if (isset($arr['children']) && count($arr['children']) > 0)
{
$output .= $this->genTree($arr['children'], $selectedValues);
}
$output .= '</li>';
}
$output .= '</ul>';
return $output;
}
公共函数genTree($tree,$selectedValues=[1,2,3,4])
{
$output='';
foreach($tree as$arr)
{
$output.='- ';
foreach($selectedValues作为$num)
{
如果($num==$arr['id']))
{
$output.='';
}否则{
$output.='';
}
}
$output.=''.ucfirst($arr['name'])。';
如果(isset($arr['children'])和计数($arr['children'])>0)
{
$output.=$this->genTree($arr['children',$selectedValues);
}
$output.='
';
}
$output.='
';
返回$output;
}
第15行似乎是问题所在,但除此之外,我对可能发生的事情一无所知。任何帮助都将不胜感激 你的第二个
foreach
在我看来很奇怪-你确定你不想要类似if(在数组(…)
的东西,而不是foreach
中的if
您的
属性的上也缺少=
否则,递归逻辑和变量传递看起来不错。一个示例数组和/或函数调用的结果输出会很有帮助。你的第二个foreach
在我看来很奇怪-你确定你不想要像if(in_array(…)
这样的东西吗?这确实起到了作用。在数组中,即。在构建函数时,我考虑的是循环。你能写下这个作为答案吗?谢谢你,我一直在做循环的事情,没有考虑在数组中。