PHP无限级分类实现。。。。。。
1,数据库设计:
2,代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69  | /** * @author koma * @todo   PHP无限极分类 */$cn = mysql_connect('localhost', 'root', '') or die(mysql_error());mysql_select_db('t', $cn) or die(mysql_error());mysql_query('set names utf8');/** * 从顶层逐级向下获取子类 * @param number $pid * @param array $lists * @param number $deep * @return array */function getLists($pid = 0, &$lists = array(), $deep = 1) {    $sql = 'SELECT * FROM category WHERE pid='.$pid;    $res = mysql_query($sql);    while ( ($row = mysql_fetch_assoc($res)) !== FALSE ) {        $row['catename'] = str_repeat('   ', $deep).'|---'.$row['catename'];        $lists[] = $row;        getLists($row['id'], $lists, ++$deep); //进入子类之前深度+1        --$deep; //从子类退出之后深度-1    }    return $lists;}function displayLists($pid = 0, $selectid = 1) {    $result = getLists($pid);    $str = '<select>';    foreach ( $result as $item ) {        $selected = "";        if ( $selectid == $item['id'] ) {            $selected = 'selected';        }        $str .= '<option '.$selected.'>'.$item['catename'].'</option>';    }    return $str .= '</select>';}/** * 从子类开始逐级向上获取其父类 * @param number $cid * @param array $category * @return array: */function getCategory($cid, &$category = array()) {    $sql = 'SELECT * FROM category WHERE id='.$cid.' LIMIT 1';    $result = mysql_query($sql);    $row = mysql_fetch_assoc($result);    if ( $row ) {        $category[] = $row;        getCategory($row['pid'], $category);    }    krsort($category); //逆序,达到从父类到子类的效果    return $category;}function displayCategory($cid) {    $result = getCategory($cid);    $str = "";    foreach ( $result as $item ) {        $str .= '<a href="'.$item['id'].'">'.$item['catename'].'</a>>';    }    return substr($str, 0, strlen($str) - 1);}echo displayLists(0, 3);echo displayCategory(13); | 
3,效果图:
			

