我们面试程序开发的时候,经常会被问到递归的问题。今天我们在本文中以“二当家的的特效分类表”作为演示,使用PHP递归结合Mysql实现无限级分类。
0、请不要问“在不在”之类的问题,有问题直接问!1、学生或暂时没有工作的童鞋,整站资源免费下载!2、¥9.9充值终身VIP会员,加我微信,826096331 拉你进VIP群学习!3、程序员加油,技术改变世界。 在线 充值
递归简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。
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;
}
}
友情提示:垃圾评论一律封号 加我微信:826096331拉你进VIP群学习群