123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- namespace tools;
- 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();
-
- public static function makeTree($data, $options=array())
- {
- $dataset = self::buildData($data, $options);
- $r = self::makeTreeCore(0, $dataset, 'normal');
- return $r;
- }
-
-
- 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;
- }
- }
|