本文目錄一覽:
php無限分類怎麼弄
這樣來做。。 一個表分三個欄位 ID 名 《父類ID》
如果為頂級類則父類ID 設為 0
如果為子類則 把子類的父類ID 設為所在《父類ID》即可。。 如果為第三層子類 則把父類ID設為第二層的 父類ID
依次!! 這樣就可以無限了。。 當然。。 如果要優化的話可能就需要加一些別的欄位來幫助優化了
php無限級分類
同一個表中存放父類和子類,但每一條記錄都要有parent_id和category_id,最頂級分類的父id為0,然後第二層分類的父id只要是相應父類的分類id,以此類推。
顯示的時候,先排序,按id就能分出來。
PHP無限級分類
主要是利用函數的遞歸,然後在無下級的條件下退出遞歸!
這個是我自己寫的一個函數,無限樹型的你參考下吧!
function getCategoryTree($TID, $iTable,$url,$urlPar=”1=1″) {
if ($TID == 0) {
$treeStr = $treeStr.”ul id=\”tree\” class=\”lightTreeview treeview-black\””;
}
$sql = “select * from `$iTable` where TID1 = “.$TID.” order by orderid”;
$rs = mysql_query($sql);
while ($ary = mysql_fetch_array($rs)) {
$treeStr = $treeStr.”li”;
$rs2 = mysql_query(“select count(*) from `$iTable` where TID1 = “.$ary[“id”]);
$Vcount = @mysql_result($rs2, 0);
if ($Vcount != 0) {
$treeStr = $treeStr.”div class=\”treeview-folder\””.$ary[“title”].”/divul style=\”display:none\””;
$treeStr = $treeStr.getCategoryTree($ary[“id”], $iTable,$url,$urlPar);
$treeStr = $treeStr.”/ul”;
} else {
$treeStr = $treeStr.”div class=\”treeview-file\”a href=\””.$url.”?T=”.$ary[“id”].””.$urlPar.”\” target=\”pro\””.$ary[“title”].”/a/div”;
}
$treeStr = $treeStr.”/li”;
}@mysql_free_result($rs);
if ($TID == 0) {
$treeStr = $treeStr.”/ul”;
}
return $treeStr;
}
thinkphp無限極分類能分頁顯示嗎
TreeTable是一個能把無限分類展現為表格形式的PHP類庫插件,分類的層級表示為表格的列,分類的行數表格分類的總數。單元格顯示分類名稱。
TreeTable通過對單元格的行合併和列合併實現了無限層級也能較好的展示層級架構。
1.構建ID/PID/NAME的數組,後期可通過資料庫生成的動態數據。
Tree演算法請打開鏈接:
array(
* 1 = array(‘id’=’1′,’parentid’=0,’name’=’一級欄目一’),
* 2 = array(‘id’=’2′,’parentid’=0,’name’=’一級欄目二’),
* 3 = array(‘id’=’3′,’parentid’=1,’name’=’二級欄目一’),
* 4 = array(‘id’=’4′,’parentid’=1,’name’=’二級欄目二’),
* 5 = array(‘id’=’5′,’parentid’=2,’name’=’二級欄目三’),
* 6 = array(‘id’=’6′,’parentid’=3,’name’=’三級欄目一’),
* 7 = array(‘id’=’7′,’parentid’=3,’name’=’三級欄目二’)
* )
2. 導入TreeTable類庫。
import(‘@.ORG.Util.TableTree’); //Thinkphp導入方法
3. 生成TreeTable HTML代碼
$treeTable-init($treearr);
echo $treeTable-get_treetable();
注意:get_treetable()只生產表體部門,TALBE/TABLE請自行構建。
完整代碼
?php
/**
* File name: TreeTable.class.php
* Author: run.gao 312854458@qq.com Date: 2012-07-24 23:22 GMT+8
* Description: 通用的表格無限級分類
* */
/**
* 表格展示無限分類是將無線分類已表格的形式表現出來,更好的能體現出分類的所屬關係
* 使用方法:
* 1. 實例化分類
* $treeTable = new TreeTable();
* 2. 初始化分類,$treearr必須是一個多維數組且包含 id,parentid,name欄位
* $treeTable-init($treearr);
* 3. 獲取無限分類HTML代碼
* echo $treeTable-get_treetable();
* */
class TreeTable {
/**
* 生成樹型結構所需要的2維數組
* @var array
*/
public $arr = array();
/**
* 表格列數
* @var int
*/
public $columns = 0;
/**
* 表格行數
* @var int
*/
public $rows = 0;
/**
* 初始化TreeTable數據
* @param array 2維數組
* array(
* 1 = array(‘id’=’1′,’parentid’=0,’name’=’一級欄目一’),
* 2 = array(‘id’=’2′,’parentid’=0,’name’=’一級欄目二’),
* 3 = array(‘id’=’3′,’parentid’=1,’name’=’二級欄目一’),
* 4 = array(‘id’=’4′,’parentid’=1,’name’=’二級欄目二’),
* 5 = array(‘id’=’5′,’parentid’=2,’name’=’二級欄目三’),
* 6 = array(‘id’=’6′,’parentid’=3,’name’=’三級欄目一’),
* 7 = array(‘id’=’7′,’parentid’=3,’name’=’三級欄目二’)
* )
*/
public function init($arr=array()){
if(!is_array($arr)) return false;
foreach ($arr as $k=$v) {
$this-arr[$v[‘id’]] = $v;
}
foreach ($this-arr as $k = $v){
$this-arr[$k][‘column’] = $this-get_level($v[‘id’]); // Y軸位置
$this-arr[$k][‘arrchildid’] = $this-get_arrchildid($v[‘id’]); // 所有子節點
$this-arr[$k][‘arrparentid’] = $this-get_arrparentid($v[‘id’]); // 所有父節點
$this-arr[$k][‘child_bottom_num’] = $this-get_child_count($v[‘id’]); // 所有底層元素節點
}
$this-columns = $this-get_columns(); // 總行數
$this-rows = $this-get_rows(); // 總列數
// 按照arrparentid和id號進行排序
$this-sort_arr();
foreach ($this-arr as $k = $v){
$this-arr[$k][‘row’] = $this-get_row_location($v[‘id’]); // X軸位置
$this-arr[$k][‘rowspan’] = $v[‘child_bottom_num’]; // 行合併數
$this-arr[$k][‘colspan’] = $v[‘child_bottom_num’] == 0 ? $this-columns – $v[‘column’] + 1 : 0; //列合併數
}
return $this-get_tree_arr();
}
/**
* 獲取數組
* */
public function get_tree_arr(){
return is_array($this-arr) ? $this-arr : false;
}
/**
* 按arrparentid/id號依次重新排序數組
* */
public function sort_arr(){
// 要進行排序的欄位
foreach ($this-arr as $k = $v){
$order_pid_arr[$k] = $v[‘arrparentid’];
$order_iscost[] = $v[‘sort’];
$order_id_arr[$k] = $v[‘id’];
}
// 先根據arrparentid排序,再根據排序,id號排序
array_multisort(
$order_pid_arr, SORT_ASC, SORT_STRING,
$order_iscost, SORT_DESC, SORT_NUMERIC,
$order_id_arr, SORT_ASC, SORT_NUMERIC,
$this-arr);
// 獲取每一個節點層次
for ($column = 1; $column = $this-columns; $column++) {
$row_level = 0;
foreach ($this-arr as $key = $node){
if ($node[‘column’] == $column){
$row_level++;
$this-arr[$key][‘column_level’] = $row_level;
}
}
}
// 重新計算以ID作為鍵名
foreach ($this-arr as $k=$v) {
$arr[$v[‘id’]] = $v;
}
$this-arr = $arr;
}
/**
* 得到父級數組
* @param int
* @return array
*/
public function get_parent($myid){
$newarr = array();
if(!isset($this-arr[$myid])) return false;
$pid = $this-arr[$myid][‘parentid’];
$pid = $this-arr[$pid][‘parentid’];
if(is_array($this-arr)){
foreach($this-arr as $id = $a){
if($a[‘parentid’] == $pid) $newarr[$id] = $a;
}
}
return $newarr;
}
/**
* 得到子級數組
* @param int
* @return array
*/
public function get_child($myid){
$a = $newarr = array();
if(is_array($this-arr)){
foreach($this-arr as $id = $a){
if($a[‘parentid’] == $myid) $newarr[$id] = $a;
}
}
return $newarr ? $newarr : false;
}
/**
* 獲取當前節點所在的層級
* @param $myid 當前節點ID號
* */
public function get_level($myid, $init = true){
static $level = 1;
if($init) $level = 1;
if ($this-arr[$myid][‘parentid’]) {
$level++;
$this-get_level($this-arr[$myid][‘parentid’], false);
}
return $level;
}
/**
* 獲取當前節點所有底層節點(沒有子節點的節點)的數量
* @param $myid 節點ID號
* @param $init 第一次載入將情況static變數
* */
public function get_child_count($myid, $init = true){
static $count = 0;
if($init) $count = 0;
if(!$this-get_child($myid) $init) return 0;
if($childarr = $this-get_child($myid)){
foreach ($childarr as $v){
$this-get_child_count($v[‘id’], false);
}
}else{
$count++;
}
return $count;
}
/**
* 獲取節點所有子節點ID號
* @param $catid 節點ID號
* @param $init 第一次載入將情況static初始化
* */
public function get_arrchildid($myid, $init = true) {
static $childid;
if($init) $childid = ”;
if(!is_array($this-arr)) return false;
foreach($this-arr as $id = $a){
if($a[‘parentid’] == $myid) {
$childid = $childid ? $childid.’,’.$a[‘id’] : $a[‘id’];
$this-get_arrchildid($a[‘id’], false);
}
}
return $childid ;
}
/**
* 獲取該節點所有父節點ID號
* @param $id 節點ID號
* */
public function get_arrparentid($id, $arrparentid = ”) {
if(!is_array($this-arr)) return false;
$parentid = $this-arr[$id][‘parentid’];
if($parentid 0) $arrparentid = $arrparentid ? $parentid.’,’.$arrparentid : $parentid;
if($parentid) $arrparentid = $this-get_arrparentid($parentid, $arrparentid);
return $arrparentid;
}
/**
* 獲取節點所在地行定位
* @param $myid 節點ID號
*/
public function get_row_location($myid){
$nodearr = $this-arr;
// 獲取每一個節點所在行的位置
foreach ($nodearr as $key = $node){
if($myid == $node[‘id’]) {
$node_row_count = 0;
$arrparentid = explode(‘,’, $node[‘arrparentid’]);
// 所有父節點小於當前節點層次的底層節點等於0的元素
foreach ($arrparentid as $pid){
foreach ($nodearr as $node_row){
if($node_row[‘column’] == $nodearr[$pid][‘column’] $nodearr[$pid][‘column_level’] $node_row[‘column_level’] $node_row[‘child_bottom_num’] == 0){
$node_row_count ++;
}
}
}
// 所有當前節點並且節點層次(rowid_level)小於當前節點層次的個數
foreach ($nodearr as $node_row){
if($node[‘column’] == $node_row[‘column’] $node_row[‘column_level’] $node[‘column_level’]){
$node_row_count += $node_row[‘child_bottom_num’] ? $node_row[‘child_bottom_num’] : 1;
}
}
$node_row_count++;
break;
}
}
return $node_row_count;
}
/**
* 獲取表格的行數
* */
public function get_rows(){
$row = 0;
foreach ($this-arr as $key = $node){
if($node[‘child_bottom_num’] == 0){
$rows++; // 總行數
}
}
return $rows;
}
/**
* 獲取表格的列數
* */
public function get_columns(){
$columns = 0 ;
foreach ($this-arr as $key = $node){
if($node[‘column’] $columns){
$columns = $node[‘column’]; // 總列數
}
}
return $columns;
}
/**
* 獲取分類的表格展現形式(不包含表頭)
* */
public function get_treetable(){
$table_string = ”;
for($row = 1; $row = $this-rows; $row++){
$table_string .= “\r\ttr”;
foreach ($this-arr as $v){
if($v[‘row’] == $row){
$rowspan = $v[‘rowspan’] ? “rowspan='{$v[‘rowspan’]}'” : ”;
$colspan = $v[‘colspan’] ? “colspan='{$v[‘colspan’]}'” : ”;
$table_string .= “\r\t\ttd {$rowspan} {$colspan}
{$v[‘name’]}
/td”;
}
}
$table_string .= “\r\t/tr”;
}
return $table_string;
}
}
?
PHP無限級分類怎麼寫啊
?php
/*========================================================
類名:catalog
功能:無限分級類
方法:
樹形顯示分類
catalog_show($id) //參數$id 遞歸調用
流程:找到父分類為0所有根分類- 一直遞歸取得所有分類並顯示
添加分類
catalog_add($uid,$name) //$uid 父id //$name 分類名
流程:依據$uid,在此id下添加一個新子id
刪除分類
catalog_del($uid)//參數 $uid 數要刪除的分類
修改分類
catalog_set($id,$name) //參數 $id 要修改的分類 //參數 $name 新的分類名
變數:
$config //資料庫信息- host,user,pass,dbname
$catalog_dbname //分類資料庫名
資料庫:
catalog_id //分類的自然序號
catalog_uid //分類的父分類
catalog_name //分類名
catalog_path_number //親緣樹數字形式 0:1:2
catalog_path_char //親緣樹字元形式 分類1:分類1.1:分類1.1.1
參照文章
========================================================*/
class catalog{
var $config;
var $catalog_dbname;
var $links;
private function connect(){
$this-links = mysql_connect($this-config[‘host’],$this-config[‘user’],$this-config[‘pass’]) or die(“錯誤: 第”.__LINE__.”行br”.mysql_error());
mysql_select_db($this-config[‘dbname’],$this-links);
mysql_query(“SET NAMES gb2312”);
}
function catalog_show($uid = 0){
$this-connect();
$sql = “Select * FROM “.$this-catalog_dbname. “
Where catalog_uid = “. $uid .”
orDER BY catalog_id “;
$result = mysql_query($sql,$this-links) or die(“錯誤: 第”.__LINE__.”行br”.mysql_error());
if(mysql_num_rows($result) 0){
while ($row = mysql_fetch_assoc($result)){
if($this-sun_catalog($row[‘catalog_id’])){//判斷有沒有子分類
$cata_img = “img id = ‘img”.$row[‘catalog_id’].”‘ src=’./img/last_node.jpg’ ōnclick=’click_catalog(“.$row[‘catalog_id’].”)’/”;
}else{
$cata_img = “img src=’./img/sp.jpg’/”;
}
$path = explode(“:”,$row[‘catalog_path_number’]);
if(count($path) 1){
for($i=1;$icount($path);$i++){
$path_img .= “img src=’./img/sp.jpg’/”;
}
}
echo $path_img.$cata_img;
echo “a class=’menu’ href = ‘javascrīpt:send_id(“.$row[‘catalog_id’].”)'”;
echo $row[‘catalog_name’].”/abr”;
$path_img = “”;
if($this-sun_catalog($row[‘catalog_id’])){
$hidden_div = “style=’display:none'”;
echo “div id = ‘div”.$row[‘catalog_id’].”‘ “.$hidden_div.””;
$this-catalog_show($row[‘catalog_id’]);
echo “/div”;
}
}
}
}
private function sun_catalog($uid){//判斷是否有子分類
$sql = “Select * FROM “.$this-catalog_dbname. “
Where catalog_uid = “. $uid .”
orDER BY catalog_id “;
$result = mysql_query($sql,$this-links) or die(“錯誤: 第”.__LINE__.”行br”.mysql_error());
if(mysql_num_rows($result) 0){
return true;
}else{
return false;
}
}
function catalog_add($uid,$name){
//獲取父id的親緣樹
$this-connect();
$sql = “Select * FROM “.$this-catalog_dbname.”
Where catalog_id = ‘”.$uid.”‘”;
$result = mysql_query($sql,$this-links)
or die(“錯誤: 第”.__LINE__.”行br”.mysql_error());
$row = mysql_fetch_assoc($result);
$fid_path_number = $row[‘catalog_path_number’];//id的數字親緣樹
$fid_path_char = $row[‘catalog_path_char’];//id的字元親緣樹
//插入數據 先插入行-再找到最新插入的id, 在依據這個id進行修改
$sql = “Insert INTO “.$this-catalog_dbname.”(catalog_uid,catalog_name)
VALUES(“.$uid.”,'”.$name.”‘)”;
$result = mysql_query($sql,$this-links)
or die(“錯誤: 第”.__LINE__.”行br”.mysql_error());
$catalog_id = mysql_insert_id();//獲取自己的id
$catalog_path_number = $fid_path_number.”:”.$catalog_id;//得到自己的數字親緣數
$catalog_path_char = $fid_path_char.”:”.$name;//得到自己的字元親緣數
$sql = “Update ‘”.$this-catalog_dbname.”‘
SET
catalog_path_number = ‘”.$catalog_path_number.”‘,
catalog_path_char = ‘”.$catalog_path_char.”‘
Where
catalog_id = “.$catalog_id;
mysql_query($sql,$this-links)
or die(“錯誤: 第”.__LINE__.”行br”.mysql_error());
}
function catalog_del($id){
$this-connect();
$sql = “Delete FROM “.$this-catalog_dbname.”
Where catalog_id = “.$id;
mysql_query($sql,$this-links)
or die(“錯誤: 第”.__LINE__.”行br”.mysql_error());
}
function catalog_set($id,$name){
$this-connect();
$sql = “Update “.$this-catalog_dbname.”
SET
catalog_name = ‘”.$name.”‘
Where
catalog_id = “.$id;
mysql_query($sql,$this-links)
or die(“錯誤: 第”.__LINE__.”行br”.mysql_error());
}
}
?
原創文章,作者:SMDA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/143507.html