php版表格展示無限級分類,php 無限分類

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SMDA的頭像SMDA
上一篇 2024-10-22 23:34
下一篇 2024-10-22 23:34

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • 使用Treeview顯示錶格

    在web開發中,顯示錶格數據是一項很常見的需求。當我們需要在頁面上顯示大量數據時,除了使用傳統的表格樣式外,還可以使用Treeview這種可摺疊的表格樣式,以便更好地展示數據。本文…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29
  • Python 圖片轉表格

    本文將詳細介紹如何使用Python將圖片轉為表格。大家平時在處理一些資料的時候難免會遇到圖片轉表格的需求。比如從PDF文檔中提取表格等場景。當然,這個功能也可以通過手動複製、粘貼,…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • python爬取網頁並生成表格

    本文將從以下幾個方面詳細介紹如何使用Python爬取網頁數據並生成表格: 一、獲取網頁數據 獲取網頁數據的一般思路是通過HTTP請求獲取網頁內容,最常用的方式是使用Python庫r…

    編程 2025-04-28
  • Python如何做表格為中心

    本文將從多個方面詳細闡述Python如何做表格,包括表格的創建、數據的插入、表格的樣式設置等內容。 一、創建表格 要在Python中創建表格,我們可以使用第三方庫Pandas。具體…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • 52周存錢法表格圖100元

    52周存錢法是一種有效的儲蓄方法,它能夠幫助人們規律性地儲蓄並實現財務目標。針對這種儲蓄方法,我們可以使用表格來更加直觀地記錄儲蓄進度,並且可以通過代碼實現,給用戶提供更加便捷的服…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27

發表回復

登錄後才能評論