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,效果图: