我们面试程序开发的时候,经常会被问到递归的问题。今天我们在本文中以“素材火的特效分类表”作为演示,使用PHP递归结合Mysql实现无限级分类。
难易:初级
下载资源
下载积分:
50
积分
递归简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。
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 .= '
- ';
$level++;
while ($row = mysql_fetch_array($result)) { //循环记录集
$str .= "
" . $row['id'] . "--" . $row['name'] . $level . ""; //构建字符串get_str($row['id'], $level); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级
}
$str .= '
';}
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;
}
}