/**
* Created by 小雨在线.
* User: 飛天
* Date: 2017/8/19 0019
* Time: 16:04
*/
require('../PHPTree.class.php');
//原始数据, 从数据库读出
/*$data = array(
array(
'id'=>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);
/**
* @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) {
/** @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;
}
}
?>
效果:
参考资料:
http://www.layui.com/doc/modules/tree.html
https://my.oschina.net/crazymus/blog/491174
http://git.oschina.net/jiusem/PHPTree