树形菜单文档 - layui.tree-示例

为什么80%的码农都做不了架构师?>>>   hot3.png

 

1,
        'name'=>'book',
        'parent_id'=>0
    ),
    array(
        'id'=>2,
        'name'=>'music',
        'parent_id'=>0
    ),
    array(
        'id'=>3,
        'name'=>'book1',
        'parent_id'=>1
    ),
    array(
        'id'=>4,
        'name'=>'book2',
        'parent_id'=>3
    )
);

$r = PHPTree::makeTree($data);
echo json_encode($r);
*/


define("HOST", "aaaa");    //主机名
define("USER", "bbbb");        //账号
define("PASS", "ccccc");        //密码
define("DBNAME", "ddd-database");    //数据库名


$conn = new mysqli(HOST, USER, PASS);
$conn->select_db(DBNAME);
$sql = "SELECT catename AS name,id,pid AS pId,cateorder FROM wuxianfenlei_deepcate ORDER BY id DESC";
$result = $conn->query($sql);


$data1 = [];

while ($row = $result->fetch_assoc()) {
    $data1[] = $row;
}


//echo json_encode($data1);


$r = PHPTree::makeTree($data1, array(
    'primary_key' => 'id',
    'parent_key' => 'pId'
));


echo json_encode($r);

 


 * @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) {
            /** @var TYPE_NAME $primary_key */
            $id = $item[$primary_key];
            /** @var TYPE_NAME $parent_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])) {
                    /** @var TYPE_NAME $expanded_key */
                    $item[$expanded_key] = self::$config['expanded'];
                    /** @var TYPE_NAME $children_key */
                    $item[$children_key] = self::makeTreeCore($id, $data, $type);
                } else {
                    /** @var TYPE_NAME $leaf_key */
                    $item[$leaf_key] = true;
                }
                $r[] = $item;
            } else if ($type == 'linear') {
                /** @var TYPE_NAME $parent_key */
                $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;
    }
}


?>

效果:

树形菜单文档 - layui.tree-示例_第1张图片

 

 

参考资料:

http://www.layui.com/doc/modules/tree.html

https://my.oschina.net/crazymus/blog/491174

http://git.oschina.net/jiusem/PHPTree

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/yjft/blog/1517377

你可能感兴趣的:(树形菜单文档 - layui.tree-示例)