php三级联动+无限分类+树形菜单
2017-12-06 14:27
459 查看
<?php namespace App\lib; /** * @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 Tree { protected static $config = array( /* 主键 */ 'primary_key' => 'id', /* 父键 */ 'parent_key' => 'pid', /* 展开属性 */ '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; } else if ($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; } }
html显示调用代码:
[php] view plain copy
<pre code_snippet_id="2069302" snippet_file_name="blog_20161222_4_960473" name="code" class="php">echo '<h1>PHPTree树形结构</h1>';
echo '<select style="width:300px;">';
foreach($r as $item){
echo '<option>';
//根据所在的层次缩进
echo str_repeat('......',$item['level']);
echo $item['name'];
echo '</option>';
}
echo '</select>';</pre><br>
<br>
<pre></pre>
<p><br>
</p>
相关文章推荐
- php无限分类与树形菜单
- PHP无限分类(树形类)
- jQuery+php+MySQL一张表实现三级联动菜单
- php简单实现无限分类树形列表的方法
- php三级联动菜单
- 省市县三级分类联动菜单
- php实现无限级分类的树形结构
- php递归获取无限分类菜单
- 转:php+mysql菜单无限级分类(非递归)
- PHP无限分类(树形类)
- winform树形菜单无限级分类实例
- 最简单的无线分类,无限树形菜单解决方案
- php 无限分类 树形数据 格式化
- PHP无限分类(树形类),非数据库直接递归
- PHP三级联动菜单【PHP+MYSQL】
- Ajax+php实现商品分类三级联动
- 基于bootstrap-treeview做的一个漂亮的无限分类树层级联动菜单
- php无限分类读取多级菜单
- PHP无限分类(树形类)
- DedeCMS 栏目三级联动树形菜单的代码