
现在前台要根据分类遍历出三级导航
需要把查询出来的数据处理成多维数组,方便前台用多个foreach嵌套遍历。
网上多方搜集资料、经过验证成功后,记录解决方案如下:
1、从数据库查询出所有数据;
2、对数据进行初步处理,使二维数组的“键”与三维数组的id相等,将数据存入新数组$tmp;
/**
* 获取树状结构数据
*/
public function getTree()
{
// 取出所有的数据
$where['isdelete'] = 2;
$where['isshow'] = 1;
$thisData = $this->field("id,name,parent_id,level")->where($where)->select();
foreach($thisData as $k=>$v)
{
$tmpArr[$v['id']] = $thisData[$k];
}
return $this->generateTree($tmpArr);
}
3、调用generateTree() 方法把 $tmpArr数组转换成对应的多维数组/**
* 极致追求效率,但是对数据结构要求很高
* 必须二维数组的“键”与三维数组的id相等,并且无法指定起始节点
*/
private function generateTree($data)
{
$tree = array();
foreach($data as $val){
if(isset($data[$val['parent_id']])){
$data[$val['parent_id']]['children'][] = &$data[$val['id']];
}else{
$tree[] = &$data[$val['id']];
}
}
return $tree;
}
4、将处理后的数据渲染到前台遍历。
本文来自网络整理
最佳答案
