A5下载 - 努力做内容最丰富最安全的下载站!

A5站长下载站

当前位置:A5下载 > 源码技巧 > 其它源码教程 > PHP生成树的方法

PHP生成树的方法

时间:2015-07-29 09:44作者:fang人气:70

本文实例讲述了PHP生成树的方法。分享给大家供大家参考。具体如下:

这个类不是我写的 只添加了getAll()函数

php生成一个树,可以用于产品分类

不知道遍历写的是否优化,如果你有请分享一下吧 -.-!

运行效果如下图所示:

PHP生成树的方法

实现代码如下:

<?php

class Tree

{

public $data=array();

public $cateArray=array();

public $res=array();

function Tree()

{

}

function setNode ($id, $parent, $value)

{

$parent = $parent?$parent:0;

$this->data[$id] = $value;

//print_r($this->data);

//echo "rn";

$this->cateArray[$id] = $parent; //节点数组

//print_r($this->cateArray);

}

function getChildsTree($id=0)

{

$childs=array();

foreach ($this->cateArray as $child=>$parent)

{

if ($parent==$id)

{

$childs[$child]=$this->getChildsTree($child);

}

}

print_r($childs)."/r/n";

return $childs;

}

function getParentsTree($id=0)

{

$parents=array();

foreach ($this->cateArray as $child=>$parent)

{

if ($child ==$id)

{

$parents[$parent]=$this->getParentsTree($parent);

}

}

print_r($parents)."/r/n";

return $parents;

}

function getChilds($id=0)

{

$childArray=array();

$childs=$this->getChild($id);

foreach ($childs as $child)

{

$childArray[]=$child;

$childArray=array_merge($childArray,$this->getChilds($child));

}

return $childArray;

}

function getChild($id)

{

$childs=array();

foreach ($this->cateArray as $child=>$parent)

{

if ($parent==$id)

{

$childs[$child]=$child;

}

}

return $childs;

}

function getParents($id)

{

$parentArray=array();

$parents=$this->getParent($id);

foreach ($parents as $parent)

{

$parentArray[]=$parent;

$parentArray=array_merge($parentArray,$this->getParents($parent));

}

return $parentArray;

}

function getParent($id)

{

$parents=array();

foreach ($this->cateArray as $child=>$parent)

{

if ($child==$id)

{

$parents[$parent]=$parent;

}

}

return $parents;

}

//单线获取父节点

function getNodeLever($id)

{

$parents=array();

if (key_exists($this->cateArray[$id],$this->cateArray))

{

$parents[]=$this->cateArray[$id];

$parents=array_merge($parents,$this->getNodeLever($this->cateArray[$id]));

}

return $parents;

}

function getLayer($id,$preStr='|-')

{

return str_repeat($preStr,count($this->getNodeLever($id)));

}

function getValue ($id)

{

return $this->data[$id];

} // end func

//获取所有节点数据生成树

function getAll($id=0,$str="|-"){

if($id!=0){

$str=$str."|-";

}

//遍历所有数组检查parent是否有id

foreach($this->cateArray as $child=>$parent){

//检查是否有相等的ID

if($parent==$id){

$this->res[$child]=$str.$this->getValue($child);

$this->getAll($child,$str);

}

//$this->res[$child]=$child.$str.$this->getValue($child);

}

}

}

//构造树

//setNode ($id, $parent, $value)

$tree = new Tree();

$tree->setNode("1","","电器");

$tree->setNode("2","","服装");

$tree->setNode("3","1","电脑");

$tree->setNode("4","1","家电");

$tree->setNode("5","2","男装");

$tree->setNode("6","2","女装");

$tree->setNode("7","3","笔记本");

$tree->setNode("8","3","台式机");

$tree->setNode("9","7","惠普");

$tree->setNode("10","7","戴尔");

$tree->setNode("11","8","火星人");

$tree->setNode("12","5","西装");

$tree->setNode("13","6","上衣");

$tree->setNode("14","9","惠普-N90");

$tree->setNode("15","9","惠普-N91");

$tree->setNode("16","10","戴尔A11");

$tree->setNode("17","10","戴尔A12");

$tree->setNode("18","10","戴尔A13");

$tree->setNode("19","6","裤子 ");

$tree->setNode("20","13","长袖");

$tree->setNode("21","13","短袖");

$tree->setNode("22","20","NIKE长袖");

$tree->setNode("23","20","361长袖");

$tree->setNode("24","22","NIKE长袖-均码");

$tree->setNode("25","22","NIKE长袖-短码");

$tree->setNode("26","14","惠普-N90-14寸");

$tree->setNode("27","14","惠普-N90-15寸");

$tree->setNode("28","14","惠普-N90-17寸");

$tree->setNode("29","28","惠普-N90-17寸-高性能企业版");

$tree->setNode("30","28","惠普-N90-17寸-普通家用版");

//获取一个节点的所有父节点

//print_r ($tree->getNodeLever(12));

//print_r ($tree->getParentsTree(12));

//$childs = $tree->getChildsTree(1);

//print_r($childs);

//echo "/r/n/r/n/r/n/r/n";

/*

foreach($childs as $key=>$value){

echo $key."<br>";

//echo $tree->getLayer($key).$tree->getValue($key)."<br>";

}

*/

$tree->getAll();

foreach($tree->res as $val){

echo $val."<br>";

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>生成Tree</title>

</head>

<body>

<h5>生成标签测试</5>

<select>

<?php

foreach($tree->res as $key=>$val){

echo "<option value='{$key}'>{$val}</option>";

}

?>

</select>

</body>

</html>

希望本文所述对大家的php程序设计有所帮助。

标签PHP,生成,方法,本文,实例,讲述了,PHP,生成,方法

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

公众号