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; }}?>
效果:
参考资料:
http://www.layui.com/doc/modules/tree.html
https://my.oschina.net/crazymus/blog/491174
http://git.oschina.net/jiusem/PHPTree