递归简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。
演示一:返回字符串
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; } }
最后附上数据库信息:
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=0;