将无限分类数据巧妙生成树形数组

时间:2019-02-16 22:33:08 类型:PHP
字号:    

在无限分类应用中, 有时我们希望将得到的无限分类从数据库中提取出来后生成树形的数组, 这里看到一位PHP工程师的代码, 感觉非常巧妙, 分享一下

1. 无限分类表格如下:

2. tp5的DB类读取数据, 并将数据做一个转化

   

   3. makeTree函数如下:

    

5. 最终打印结果如下

   

 附上代码供拷贝:

public function index(Sortclass $sort){
		$datas = Db::name("column")->where("id","<=",10)
								->field("id,sortname,parentid")
								->order("id desc")
								->select();
		$d = [];
		foreach($datas as $row){
			$d[$row["id"]] = $row; //将每行的索引值 设置为 每行的ID
		}
		dump($this->makeTree($d));
	}
	public function makeTree($datas){
		$rowTree = [];
		foreach ($datas as $id=>$row){
			if(isset($datas[$row["parentid"]])){
			 	$datas[$row["parentid"]]["children"][] = $datas[$id];
			 	//将所的有子类放到 父类 ID 对应数组的 children键名下
			} else {
			 	$rowTree[] = $datas[$id];
			}
		}
		return $rowTree;
	}