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

一个比较完善的树形结构代码

May 23, 2016 pm 05:10 PM

<?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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)