您的位置:首页 > 编程语言 > PHP开发

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