PHP递归无限分类

来源:https://www.sucaihuo.com/php/112.html 2015-05-10 09:30浏览(3254) 收藏

我们面试程序开发的时候,经常会被问到递归的问题。今天我们在本文中以“素材火的特效分类表”作为演示,使用PHP递归结合Mysql实现无限级分类。
PHP递归无限分类
分类:PHP > 分类 难易:初级
下载资源 下载积分: 50 积分

<b>递归</b>简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。

cats表:

CREATE TABLE IF NOT EXISTS `cats` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) DEFAULT '0',
  `name` varchar(50) NOT NULL,
  `ord` int(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=132 ;

INSERT INTO `cats` (`id`, `pid`, `name`, `ord`) VALUES
(1, 0, '特效分类', 1),
(2, 0, '难易程度', 2),
(3, 2, '入门级', 1),
(4, 2, '初级', 2),
(5, 2, '中级', 3),
(6, 2, '高级', 4),
(7, 1, '图片代码', 1),
(8, 1, '导航菜单', 2),
(9, 1, '选项卡/滑动门', 3),
......

演示一:返回字符串

echo get_str(0, 0); //输出无限级分类 

function get_str($id = 0, $level = 0) {
    global $str;
    $sql = "select id,name from cats where pid= $id";
    $result = mysql_query($sql); //查询pid的子类的分类 
    if ($result && mysql_affected_rows()) {//如果有子类 
        $str .= '<ul>';
        $level++;
        while ($row = mysql_fetch_array($result)) { //循环记录集 
            $str .= "<li style='padding-left:" . ($level * 20) . "px'>" . $row['id'] . "--" . $row['name'] . $level . "</li>"; //构建字符串 
            get_str($row['id'], $level); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级 
        }

        $str .= '</ul>';
    }
    return $str;
}

演示二:返回数组

$list = get_array(0); //调用函数 
print_r($list); //输出数组 

function get_array($id = 0) {
    $sql = "select id,name from cats where pid= $id";
    $result = mysql_query($sql); //查询子类 
    $arr = array();
    if ($result && mysql_affected_rows()) {//如果有子类 
        while ($rows = mysql_fetch_assoc($result)) { //循环记录集 
            $rows['list'] = get_array($rows['id']); //调用函数,传入参数,继续查询下级 
            $arr[] = $rows; //组合数组 
        }
        return $arr;
    }
}
标签: 分类递归无限
评论0
头像

系统已开启自动识别垃圾评论机制,识别到的自动封号,下载出错或者资源有问题请联系全栈客服QQ 1915635791

1 2