84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
cat_id cat_name pid cat_pat 类别ID(自增) 类别名称 0(父Id,若为0则是根类别,为自增ID) 路径 请问各位大神,能不能给出最好的方法,直接用跟类别ID 1 查询出下面的所有子类别 数据表如下:
id cat_name pid cat_path 1 手机 0 , 2 智能手机 1 ,1, 3 三星 2 ,1,2, 4 三星S系列 3 ,1,2,3, 5 三星M系列 3 ,1,2,3,
小伙看你根骨奇佳,潜力无限,来学PHP伐。
这没人回答,有前不久做了相关的工作,把算法给你吧。 思路如下:用一个堆栈来临时保存未处理根节点以及所有其的子节点,不断从堆栈中取一个节点输入,并把其直接子节点,压入堆栈,直到堆栈为空,算法结束。 我已经为你重写了详细的注释,看懂应该不成问题了!
$waitList = array(); //等待堆栈(数组用做堆栈),未处理的id array_push($waitList, $_GET["cid"]); //我这是点中某个节点(cid),列出所有子类中的数据 $rsList = array(); //结果队列 while (count($waitList) > 0) { //等待堆栈中还有节点,继续处理 $tmp = array_pop($waitList); //取出一个节点 array_push($rsList, $tmp); //输出这个节点 $dc = M("DocCategory"); //从数据表中找出这个节点的所有子节点 $dcon['pid'] = $tmp; $dcs = $dc->where($dcon)->field('id')->select(); foreach ($dcs as $value) { //将所有子节点压入等待堆栈 array_push($waitList, $value['id']); } } $con['category'] = array('in', $rsList); //生成查询条件,等待队列中已经包含了所有的子节点
这没人回答,有前不久做了相关的工作,把算法给你吧。
思路如下:用一个堆栈来临时保存未处理根节点以及所有其的子节点,不断从堆栈中取一个节点输入,并把其直接子节点,压入堆栈,直到堆栈为空,算法结束。
我已经为你重写了详细的注释,看懂应该不成问题了!