PHP递归函数实现分类数据的嵌套UL列表输出需求
递归渲染树形分类为嵌套HTML列表
我已经通过以下PHP递归函数从数据库获取了以parent_id=0为起点的树形分类数据:
public function get_categories($table_name, $parent_id = 0) { $this->db->where('`parent`', $parent_id); // 修正原代码变量名错误,原代码使用了未定义的$parent $parent = $this->db->get($table_name); $categories = $parent->result(); $i = 0; foreach ($categories as $p_cat) { $categories[$i]->sub = $this->sub_categories($table_name, $p_cat->id); $i++; } return $categories; } public function sub_categories($table_name, $id) { $this->db->where('`parent`', $id); $child = $this->db->get($table_name); $categories = $child->result(); $i = 0; foreach ($categories as $p_cat) { $categories[$i]->sub = $this->sub_categories($table_name, $p_cat->id); $i++; } return $categories; }
获取到的$categories数据结构示例:
Array ( [0] => stdClass Object ( [id] => 1 [name] => XMLELEMENT10 [parent] => 0 [sub] => Array ( [0] => stdClass Object ( [id] => 13 [name] => XMLELEMENT113 [parent] => 1 [sub] => Array ( ) ) [1] => stdClass Object ( [id] => 14 [name] => XMLELEMENT114 [parent] => 1 [sub] => Array ( ) ) [2] => stdClass Object ( [id] => 15 [name] => XMLELEMENT115 [parent] => 1 [sub] => Array ( ) ) [3] => stdClass Object ( [id] => 16 [name] => XMLELEMENT116 [parent] => 1 [sub] => Array ( ) ) ) ) [1] => stdClass Object ( [id] => 2 [name] => XMLELEMENT20 [parent] => 0 [sub] => Array ( [0] => stdClass Object ( [id] => 5 [name] => XMLELEMENT52 [parent] => 2 [sub] => Array ( ) ) ) ) // 其余数据省略... )
现在需要将这些数据渲染成嵌套的HTML列表结构,以下是实现该功能的递归函数:
function renderCategories($categories) { // 分类数组为空时直接返回空字符串 if (empty($categories)) { return ''; } $html = '<ul>'; foreach ($categories as $category) { // 转义分类名称,避免XSS攻击和HTML字符冲突 $html .= '<li>' . htmlspecialchars($category->name); // 递归渲染子分类 $html .= renderCategories($category->sub); $html .= '</li>'; } $html .= '</ul>'; return $html; }
使用方法
获取到分类数据后,直接调用函数生成并输出HTML:
// 假设已通过get_categories获取到$categories数据 $categoryHtml = renderCategories($categories); echo $categoryHtml;
函数会自动判断当前分类是否包含子分类,有子分类则递归生成嵌套列表,无则直接闭合<li>标签。
内容的提问来源于stack exchange,提问作者zkanoca
相关产品推荐
相关产品推荐

