| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 
							- <?php
 
- namespace tools;
 
- /**
 
-  * @name PHPTree
 
-  * @author crazymus < QQ:291445576 >
 
-  * @des PHP生成树形结构,无限多级分类
 
-  * @version 1.2.0
 
-  * @Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 
-  * @updated 2015-08-26
 
-  */
 
- class Phptree
 
- {
 
-     protected static $config = array(
 
-         /* 主键 */
 
-         'primary_key' 	=> 'id',
 
-         /* 父键 */
 
-         'parent_key'  	=> 'parent_id',
 
-         /* 展开属性 */
 
-         'expanded_key'  => 'expanded',
 
-         /* 叶子节点属性 */
 
-         'leaf_key'      => 'leaf',
 
-         /* 孩子节点属性 */
 
-         'children_key'  => 'children',
 
-         /* 是否展开子节点 */
 
-         'expanded'    	=> false
 
-     );
 
-     
 
-     /* 结果集 */
 
-     protected static $result = array();
 
-     
 
-     /* 层次暂存 */
 
-     protected static $level = array();
 
-     /**
 
-      * @name 生成树形结构
 
-      * @param array 二维数组
 
-      * @return mixed 多维数组
 
-      */
 
-     public static function makeTree($data, $options=array())
 
-     {
 
-         $dataset = self::buildData($data, $options);
 
-         $r = self::makeTreeCore(0, $dataset, 'normal');
 
-         return $r;
 
-     }
 
-     
 
-     /* 生成线性结构, 便于HTML输出, 参数同上 */
 
-     public static function makeTreeForHtml($data, $options=array())
 
-     {
 
-         $dataset = self::buildData($data, $options);
 
-         $r = self::makeTreeCore(0, $dataset, 'linear');
 
-         return $r;
 
-     }
 
-     
 
-     /* 格式化数据, 私有方法 */
 
-     private static function buildData($data, $options)
 
-     {
 
-         $config = array_merge(self::$config, $options);
 
-         self::$config = $config;
 
-         extract($config);
 
-         $r = array();
 
-         foreach ($data as $item) {
 
-             $id = $item[$primary_key];
 
-             $parent_id = $item[$parent_key];
 
-             $r[$parent_id][$id] = $item;
 
-         }
 
-         
 
-         return $r;
 
-     }
 
-     
 
-     /* 生成树核心, 私有方法  */
 
-     private static function makeTreeCore($index, $data, $type='linear')
 
-     {
 
-         extract(self::$config);
 
-         foreach ($data[$index] as $id=>$item) {
 
-             if ($type=='normal') {
 
-                 if (isset($data[$id])) {
 
-                     $item[$expanded_key]= self::$config['expanded'];
 
-                     $item[$children_key]= self::makeTreeCore($id, $data, $type);
 
-                 } else {
 
-                     $item[$leaf_key]= true;
 
-                 }
 
-                 $r[] = $item;
 
-             } elseif ($type=='linear') {
 
-                 $parent_id = $item[$parent_key];
 
-                 self::$level[$id] = $index==0?0:self::$level[$parent_id]+1;
 
-                 $item['level'] = self::$level[$id];
 
-                 self::$result[] = $item;
 
-                 if (isset($data[$id])) {
 
-                     self::makeTreeCore($id, $data, $type);
 
-                 }
 
-                 
 
-                 $r = self::$result;
 
-             }
 
-         }
 
-         return $r;
 
-     }
 
- }
 
 
  |