根据id,pid怎么进行无限分类
使用遞歸函數,不過我寫這種方法空間複雜度沒有得到優化,忘記以前的寫法了
private function getTreeList($data, $pid = 0)
{
$resultarr = array();
foreach ($data as $teamdata) {
if ($teamdata['pid'] == $pid) {
$team_data = $teamdata;
$children_data = $this->getTreeList($data, $teamdata['id']);
$team_data['children'] = $children_data;
$resultarr[] = $team_data;
}
}
return $resultarr;
}
我写个了菜单排序的
1.数据表
2.控制器
//菜单列表
public function menu(){
$menu = M('menu');
$data = $menu -> order('oid') ->select();
//递归排序
$data = node_merge($data);
$this->assign('v',$data);
$this->display();
}
3.递归方法
//无限分类(递归函数)
function node_merge($node,$pid=0){
$arr = array();
foreach ($node as $v){
if($v['pid']==$pid){
$v['child']=node_merge($node,$v['id']);
$arr[]=$v;
}
}
return $arr;
}
function getcate2($pid=0,$level=0){
$level++;
$pdo = new PDO("mysql:host=localhost;dbname=lamp108",'root','root');
//第一次pid为0 的时候查的是根分类
$stmt = $pdo->query("select * from cate2 where pid={$pid}");
$data = $stmt->fetchAll(2);
foreach($data as $v){
echo str_repeat('| ',$level).'|-'.$v['name'].$v['id'].'<br />';
//把第一个根分类的id传到下一次
//下一次查询二级分类
getcate2($v['id'],$level);
}
}
getcate2();
更多分类方法请,里面还带表及测试数据 无限分类之无限方法
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答888 阅读✓ 已解决
1 回答569 阅读✓ 已解决