搜尋
首頁php教程PHP源码一个比较完善的树形结构代码

<?php
/**
* 通用的树型类,可以生成任何树型结构
*/
class tree
{
/**
* 生成树型结构所需要的2维数组
* @var array
*/
var $arr = array();

/**
* 生成树型结构所需修饰符号,可以换成图片
* @var array
*/
var $icon = array(&#39;│&#39;,&#39;├&#39;,&#39;└&#39;);

/**
* @access private
*/
var $ret = &#39;&#39;;

/**
* 构造函数,初始化类
* @param array 2维数组,例如:
* array(
* 1 => array(&#39;id&#39;=>&#39;1&#39;,&#39;parentid&#39;=>0,&#39;name&#39;=>&#39;一级栏目一&#39;),
* 2 => array(&#39;id&#39;=>&#39;2&#39;,&#39;parentid&#39;=>0,&#39;name&#39;=>&#39;一级栏目二&#39;),
* 3 => array(&#39;id&#39;=>&#39;3&#39;,&#39;parentid&#39;=>1,&#39;name&#39;=>&#39;二级栏目一&#39;),
* 4 => array(&#39;id&#39;=>&#39;4&#39;,&#39;parentid&#39;=>1,&#39;name&#39;=>&#39;二级栏目二&#39;),
* 5 => array(&#39;id&#39;=>&#39;5&#39;,&#39;parentid&#39;=>2,&#39;name&#39;=>&#39;二级栏目三&#39;),
* 6 => array(&#39;id&#39;=>&#39;6&#39;,&#39;parentid&#39;=>3,&#39;name&#39;=>&#39;三级栏目一&#39;),
* 7 => array(&#39;id&#39;=>&#39;7&#39;,&#39;parentid&#39;=>3,&#39;name&#39;=>&#39;三级栏目二&#39;)
* )
*/
function tree($arr=array())
{
 $this->arr = $arr;
 $this->ret = &#39;&#39;;
 return is_array($arr);
}

/**
* 得到父级数组
* @param int
* @return array
*/
function get_parent($myid)
{
$newarr = array();
if(!isset($this->arr[$myid])) return false;
$pid = $this->arr[$myid][&#39;parentid&#39;];
$pid = $this->arr[$pid][&#39;parentid&#39;];
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if($a[&#39;parentid&#39;] == $pid) $newarr[$id] = $a;
}
}
return $newarr;
}

/**
* 得到子级数组
* @param int
* @return array
*/
function get_child($myid)
{
$a = $newarr = array();
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if($a[&#39;parentid&#39;] == $myid) $newarr[$id] = $a;
}
}
return $newarr ? $newarr : false;
}

/**
* 得到当前位置数组
* @param int
* @return array
*/
function get_pos($myid,&$newarr)
{
$a = array();
if(!isset($this->arr[$myid])) return false;
 $newarr[] = $this->arr[$myid];
$pid = $this->arr[$myid][&#39;parentid&#39;];
if(isset($this->arr[$pid]))
{
$this->get_pos($pid,$newarr);
}
if(is_array($newarr))
{
krsort($newarr);
foreach($newarr as $v)
{
$a[$v[&#39;id&#39;]] = $v;
}
}
return $a;
}


/**
 * -------------------------------------
 * 得到树型结构
 * -------------------------------------
 * @author Midnight(杨云洲), yangyunzhou@foxmail.com
 * @param $myid 表示获得这个ID下的所有子级
 * @param $str 生成树形结构基本代码, 例如:"<option value=$id $select>$spacer$name</option>"
 * @param $sid 被选中的ID, 比如在做树形下拉框的时候需要用到
 * @param $adds
 * @param $str_group
 * @return unknown_type
*/
function get_tree($myid, $str, $sid = 0, $adds = &#39;&#39;, $str_group = &#39;&#39;)
{
$number=1;
$child = $this->get_child($myid);
if(is_array($child))
{
 $total = count($child);
foreach($child as $id=>$a)
{
$j=$k=&#39;&#39;;
if($number==$total)
{
$j .= $this->icon[2];
}
else
{
$j .= $this->icon[1];
$k = $adds ? $this->icon[0] : &#39;&#39;;
}
$spacer = $adds ? $adds.$j : &#39;&#39;;
$selected = $id==$sid ? &#39;selected&#39; : &#39;&#39;;
@extract($a);
$parentid == 0 && $str_group ? eval("$nstr = "$str_group";") : eval("$nstr = "$str";");
$this->ret .= $nstr;
$this->get_tree($id, $str, $sid, $adds.$k.&#39; &#39;,$str_group);
$number++;
}
}
return $this->ret;
}
/**
* 同上一方法类似,但允许多选
*/
function get_tree_multi($myid, $str, $sid = 0, $adds = &#39;&#39;)
{
$number=1;
$child = $this->get_child($myid);
if(is_array($child))
{
 $total = count($child);
foreach($child as $id=>$a)
{
$j=$k=&#39;&#39;;
if($number==$total)
{
$j .= $this->icon[2];
}
else
{
$j .= $this->icon[1];
$k = $adds ? $this->icon[0] : &#39;&#39;;
}
$spacer = $adds ? $adds.$j : &#39;&#39;;

$selected = $this->have($sid,$id) ? &#39;selected&#39; : &#39;&#39;;
//echo $sid.&#39;=>&#39;.$id.&#39; : &#39;.$selected.&#39; . <br/>&#39;;
@extract($a);
eval("$nstr = "$str";");
$this->ret .= $nstr;
$this->get_tree_multi($id, $str, $sid, $adds.$k.&#39; &#39;);
$number++;
}
}
return $this->ret;
}

function have($list,$item){
return(strpos(&#39;,,&#39;.$list.&#39;,&#39;,&#39;,&#39;.$item.&#39;,&#39;));
}
}
?>

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版