導航:首頁 > 編程語言 > php樹

php樹

發布時間:2022-01-29 20:21:10

php遞歸生成樹型數組

public function tree(&$list, $parent) {
//保證找到的元素都放在一個數組$tree內,應該是$tree在所有的tree函數都共享
static $tree;
//遍歷該數組,找到parent值為當前傳遞進來的$parent_id;
foreach($list as $row) {
//判斷
if($row['parent'] == $parent) {
//保存起來
$tree[] = $row;
//依據當前所找到的分類,找到其子節點,操作相同,遞歸完成
$this->tree($list, $row['id']);
}
}
return $tree;
}
你把你的數組帶進去,這個是在類裡面實現的,如果你只是想單獨用個方法,你就把public以及'$this->'去掉就行了

㈡ 如何用 PHP + MySQL 實現一個家譜樹

mysql 要創建 一張用戶表user,記錄用戶id,名稱,年齡,性別,等等信息
再創建一張關系表,relation表,記錄 user_id,parent_id
你用php查詢的時候,輸入一個名稱,可以取到他的user_id,根據user_id,可以查出他的父級,還可以查出父級的父級,也可以查出自己的子級,等等關系,這是一個大數組,最後遍歷出來就可以了

㈢ 如何用php建立一個樹形結構的類 - PHP進階討論

[php]tid=$tid;? ? ? ? ? ? ? ? $this->tname=$tname;? ? ? ? ? ? ? ? return true;? ? ? ? }? ? ? ? function add($object){? ? ? ? ? ? ? ? $this->tlib[]=&$object;? ? ? ? ? ? ? ? return true;? ? ? ? }? ? ? ? function display(){? ? ? ? ? ? ? ? $foreach=array();? ? ? ? ? ? ? ? foreach($this->tlib as $objects){? ? ? ? ? ? ? ? ? ? ? ? $foreach[]=array(? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \'id\'=>$objects->tid,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \'name\'=>$objects->tname,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \'object\'=>($objects->display())? ? ? ? ? ? ? ? ? ? ? ? );? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? return $foreach;? ? ? ? }}$tree = new tree(\"01\",\"item01\");$treeSub1 = new tree(\"0101\",\"item0101\");$tree->add($treeSub1);$treeSub2 = new Tree(\"0101\",\"item0101\");$tree->add($treeSub2);print_r($tree->display());?>[/php]

㈣ PHP如何實現許可權管理樹

<?php
/*
許可權設計
有一個全局的管理員root
每個欄目有個管理員許可權為其他許可權的合
每單個許可權為2的倍數
list/read 1
add 2
edit 2
del 4
all admin
*/
if( 5&2)
{
echo 1;
}else{
echo 0;
}
/*
簡單的許可權管理,有這個基本就夠用了,
不做更復雜的了,功能設計上不用考慮許可權,
編碼的遵循一些規范,在頂層類里,加個適配器
*/
?>

㈤ php樹型數組如何轉換成列表數組

public function tree(&$list, $parent) {
//保證找到的元素都放在一個數組$tree內,應該是$tree在所有的tree函數都共享
static $tree;
//遍歷該數組,找到parent值為當前傳遞進來的$parent_id;
foreach($list as $row) {
//判斷
if($row['parent'] == $parent) {
//保存起來
$tree[] = $row;
//依據當前所找到的分類,找到其子節點,操作相同,遞歸完成
$this->tree($list, $row['id']);
}
}
return $tree;
}
你把你的數組帶進去,這個是在類裡面實現的,如果你只是想單獨用個方法,你就把public以及'$this->'去掉就行了

㈥ PHP,二叉樹,求一個演算法

var oNowNode;//現節點
var aArray;//所存數組

var i=0;
if(oNowNode.sibling.id>oNowNode.id){
alert(」位於左區「);

}else{
alert(」位於右區「);

}
while(oNowNode.id!=0){
oNowNode=oNowNode.parent;
aArray(i)=oNowNode.id;
i++;
}
print_r(aArray);

㈦ PHP子孫樹函數的傳值是用foreach循環的,可是其結果把上次的也顯示出來了

不應該用static的,你應該傳參。

你是foreach menu裡面的,$all被你static了。然後就出現這種情況,第一個菜單獲取正常的數組,然後第二個菜單,由於static的存在,導致第二個菜單本身數組包含了第一個菜單裡面的。


你可以這樣

functionzisun($id,$all=array()){
....
$tree=zisun($v['id'],$all);
....
}

㈧ php怎麼輸出樹形內容

$class=array(
"c1"=>array("第一課","n1"=>"第一節1.1"),
"c2"=>array("第二課","n1"=>"第一節1.2"),
);
echo$class["c1"][0];
echo$class["c2"]["n1"];

這樣定義不是要簡單很多

㈨ PHP+Dtree實現動態讀取三級樹

我這有一個現成的
已經被多個網路知道網友採納了
你可以試下
http://hi..com/zhzsh/blog/item/f0035eda9105aed1b7fd48fb.html

㈩ 請教高手:php實現n叉樹遍歷

要構建的無限分類的模型. 電子產品是最大的分類.家用電器 ,數碼產品是其子分類.可以看到子分類是被父分類包含起來的.每個分類都有左右 兩個節點編號分別是1、2、3.....

根據上面的圖mysql中建立表和插入數據

CREATE TABLE `proct_categories` (

`id` MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,`name` VARCHAR( 20 ) NOT NULL ,

`left_node` MEDIUMINT( 8 ) NOT NULL ,

`right_node` MEDIUMINT( 8 ) NOT NULL

) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;INSERT INTO `proct_categories` (`id`, `name`, `left_node`, `right_node`) VALUES(1, '電子產品', 1, 20),

(2, '家用電器', 2, 9),

(3, '電視機', 3, 4),

(4, '電冰箱', 5, 6),

(5, '空調', 7, 8),

(6, '數碼產品', 10, 19),

(7, '電腦', 11, 18),

(8, '台式電腦', 12, 13),

(9, '筆記本電腦', 14, 15),

(10, '平板電腦', 16, 17);

表結構如下:

下面是PHP的實例代碼:

1、獲取所有節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT c.name FROM proct_categories as c, proct_categories as pWHERE c.left_node BETWEEN p.left_node AND p.right_nodeAND p.name='電子產品' ORDER BY c.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rs as $v){

echo $v['name'].'<br />';

}

輸出:

電子產品

家用電器

電視機

電冰箱

空調

數碼產品

電腦

台式電腦

筆記本電腦

平板電腦

2、 獲取某個父節點以及其所有子節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT c.name FROM proct_categories as c, proct_categories as pWHERE c.left_node BETWEEN p.left_node AND p.right_nodeAND p.name='數碼產品' ORDER BY c.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rs as $v){

echo $v['name'].'<br />';

}

輸出:

數碼產品

電腦

台式電腦

筆記本電腦

平板電腦

3、獲取所有的葉子節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT name FROM proct_categories where right_node-left_node=1");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rs as $v){

echo $v['name'].'<br />';

}

輸出:

電視機

電冰箱

空調

台式電腦

筆記本電腦

平板電腦

4、獲取某個子節點及其所有父節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT p.name FROM proct_categories AS c, proct_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node AND c.name = '平板電腦' ORDER BY p.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rs as $v){

echo $v['name'].'<br />';

}

輸出:

電子產品

數碼產品

電腦

平板電腦

5、獲取所有節點極其所處的層級

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT c.name, (COUNT(p.name) - 1) AS level FROM proct_categories AS c, proct_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node GROUP BY c.name ORDER BY c.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

var_mp($rs);

echo '<br />';

foreach($rs as $v){

echo $v['name'].' level:'.$v['level'].'<br />';}

輸出:

電子產品 level:0

家用電器 level:1

電視機 level:2

電冰箱 level:2

空調 level:2

數碼產品 level:2

電腦 level:2

台式電腦 level:3

筆記本電腦 level:3

平板電腦 level:3

6、獲取某個節點的層級

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT c.name, (COUNT(p.name) - 1) AS level FROM proct_categories AS c, proct_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node and c.name='平板電腦' GROUP BY c.name ORDER BY c.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

var_mp($rs);

echo '<br />';

foreach($rs as $v){

echo $v['name'].' level:'.$v['level'].'<br />';}

輸出:

平板電腦 level:3

7、在某個節點後平行的插入一個節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

function addNode($left_node,$new_node){

global $pdo;

$stmt = $pdo->prepare("SELECT right_node FROM proct_categories WHERE name = '$left_node'");$stmt->execute();

$rs=$stmt->fetch(PDO::FETCH_ASSOC);

$right_node=$rs['right_node'];

$pdo->exec("UPDATE proct_categories SET right_node = right_node + 2 WHERE right_node > $right_node");$pdo->exec("UPDATE proct_categories SET left_node = left_node + 2 WHERE left_node > $right_node");$pdo->exec("INSERT INTO proct_categories(name, left_node, right_node) VALUES('$new_node', $right_node + 1, $right_node + 2)");}

addNode('家用電器','辦公用品');

完成之後表結構如下:

8、刪除某個節點及其所有子節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

function deleteNode($node_name){

global $pdo;

$stmt = $pdo->prepare("SELECT left_node,right_node, right_node - left_node + 1 as width FROM proct_categories WHERE name ='$node_name'");$stmt->execute();

$rs=$stmt->fetch(PDO::FETCH_ASSOC);

$left_node=$rs['left_node'];

$right_node=$rs['right_node'];

$width=$rs['width'];

$pdo->exec("DELETE FROM proct_categories WHERE left_node BETWEEN $left_node AND $right_node");$pdo->exec("UPDATE proct_categories SET right_node = right_node - $width WHERE right_node > $right_node");$pdo->exec("UPDATE proct_categories SET left_node = left_node - $width WHERE left_node > $right_node");}

deleteNode('數碼產品');

完成之後表結構如下:

可以看到用多叉樹的方式構建無限分類,查詢的時候是非常簡便的.但是在插入新的節點和刪除節點時就比較麻煩了.

閱讀全文

與php樹相關的資料

熱點內容
壓縮因子定義 瀏覽:966
cd命令進不了c盤怎麼辦 瀏覽:212
葯業公司招程序員嗎 瀏覽:972
毛選pdf 瀏覽:657
linuxexecl函數 瀏覽:725
程序員異地戀結果 瀏覽:372
剖切的命令 瀏覽:226
干什麼可以賺錢開我的世界伺服器 瀏覽:288
php備案號 瀏覽:989
php視頻水印 瀏覽:166
怎麼追程序員的女生 瀏覽:487
空調外壓縮機電容 瀏覽:79
怎麼將安卓變成win 瀏覽:459
手機文件管理在哪兒新建文件夾 瀏覽:724
加密ts視頻怎麼合並 瀏覽:775
php如何寫app介面 瀏覽:804
宇宙的琴弦pdf 瀏覽:396
js項目提成計算器程序員 瀏覽:944
pdf光子 瀏覽:834
自拍軟體文件夾名稱大全 瀏覽:328