- <?php
- // 从数组转换,操作无限分类数组.
- // 数组格式, array(array('cid', 'pid', 'val'), array('cid', 'pid', 'val'));
- class tree_array {
- var $data = array();
- var $child = array();
- var $layer = array();
- var $parent = array();
- // $array, 被操纵的数组, $cid 分类 id 的key. $pid 父分类 id 的key. $value 数据的 key
- function tree_array($array = array(), $cid = 'cid', $pid = 'pid', $value = null) {
- if(!is_array($array)) return false;
- foreach($array as $v) {
- if(isset($v[$value])) {
- $this->setNode($v[$cid], $v[$pid], $v[$value]);
- }
- else
- {
- $this->setNode($v[$cid], $v[$pid], $v);
- }
- }
- }
- function setNode($id, $parent, $value){
- $parent = $parent ? $parent : 0;
- $this->data[$id] = $value;
- // if(!isset($this->child[$id])) $this->child[$id] = array();
- if(!isset($this->child[$parent])) $this->child[$parent] = array();
- $this->child[$parent][] = $id;
- $this->parent[$id] = $parent;
- }
- function getValue($id) {
- if(!isset($this->data[$id])) return false;
- return $this->data[$id];
- }
- function getLayer($id, $space = false) {
- if(!isset($this->parent[$id])) return false;
- $layer = count($this->getParents($id)) + 1;
- return $space ? str_repeat($space, $layer) : $layer;
- }
- function getTreeList(&$tree, $root= 0, $space=null) {
- if(!isset($this->child[$root])) return false;
- foreach($this->child[$root] as $key=>$id) {
- if($space) {
- $tree[$id] = $this->getLayer($id, $space) . $this->data[$id];
- }
- else
- {
- $tree[$id] = $this->data[$id];
- }
- if(isset($this->child[$id])) $this->getTreeList($tree, $id, $space);
- }
- }
- function getParent($id) {
- if(!isset($this->parent[$id])) return false;
- $tid = $this->parent[$id];
- if(!$tid) return 0;
- return array($tid => $this->data[$tid]);
- }
- function getParents($id) {
- if(!isset($this->parent[$id])) return false;
- $parents = array();
- while($this->parent[$id]){
- $id = $this->parent[$id];
- $parents[$id] = $this->data[$id];
- }
- return $parents;
- }
- function getChild($id) {
- if(!isset($this->child[$id])) return false;
- $array = array();
- foreach($this->child[$id] as $v) {
- $array[$v] = $this->data[$v];
- }
- return $array;
- }
- function getChilds($id = 0) {
- if(!isset($this->child[$id])) return false;
- $child = array();
- $this->getTreeList($child, $id);
- return $child;
- }
- function html_options($id = 0, $space='',$layer=0) {
- static $layer;
- if(!isset($this->child[$id])) return false;
- $tree = array();
- foreach($this->child[$id] as $key=>$id) {
- if($space) {
- $tree[$id] =(str_repeat($space, $layer)) . $this->data[$id];
- }
- else
- {
- $tree[$id] = $this->data[$id];
- }
- if(isset($this->child[$id])) {
- $layer++;
- $tree += $this->html_options($id, $space,$layer);
- $layer--;
- }
- }
- return $tree;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/180120131772.html
来源: http://www.codesnippet.cn/detail/180120131772.html