使用<ul> <li> </li> </ul>的递归PHP函数

时间:2012-12-05 13:34:13

标签: php recursion html-lists

我如何安排<ul>&amp; <li>用于递归PHP函数?我做了如下,但没有正常工作:

<?php
echo '<ul>';
$sql = mysql_query("select * from categories where parent_id = 0");
while($rs=mysql_fetch_array($sql)){
   echo '<li>'.$rs['name'];
   echo show_subcategory(($rs['cat_id']));
   echo '</li>';
}
echo '</ul>';

function show_subcategory($category_id){
$sql = mysql_query("select * from categories where parent_id ='$category_id'");
if(mysql_num_rows()>0){
echo '<ul>';
   while($rs=mysql_fetch_array($sql)){
     echo  '<li>'.$rs['name'];
     echo show_subcategory(($rs['cat_id']));
     echo '</ul></li>';
   }
 }else{
  echo '</li>';
 }
}
?>

CREATE TABLE IF NOT EXISTS categories (
  cat_id int(11) NOT NULL AUTO_INCREMENT,
  parent_id int(11) NOT NULL DEFAULT '0',
  name varchar(20) NOT NULL,
  description text NOT NULL,
  slug varchar(50) NOT NULL,
  PRIMARY KEY (cat_id)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;


INSERT INTO categories (cat_id, parent_id, name, description, slug) VALUES
(1, 0, 'programming', 'Forum ', 'programming'),
(2, 1, 'php', 'php programming', 'php'),
(3, 1, 'python', '', ''),
(4, 1, 'java', '', ''),
(5, 1, 'visual basic', '', ''),
(6, 2, 'codeigniter', '', ''),
(7, 2, 'joomla', '', '');    

1 个答案:

答案 0 :(得分:3)

因为它是一个递归函数,它应该输出每个类别和所有子类别的列表,你也可以将“顶级”父类别显示移动到它中(并通过调用{{1}启动它}。

之后,我们可以删除子结尾show_subcategory(0);</ul>标记,它会给我们类似的内容:

</li>

旁注,不具体回答:
我建议升级到MySQLiPDO扩展程序。两者都支持准备好的语句,这些语句提供针对SQL注入攻击的安全性(当前代码容易受到攻击)。