扫码关注官方订阅号
如下图:
parent_id为0的表示第一级,我现在传递了一个第一级的id(主键),怎么查找到该第一级下面所有所属的子级,要求获取的子级的名称和子级的id,我尝试写了很多,一直不成功。希望有大神帮忙一下,多谢多谢。
学习是最好的投资!
你是不是想递归获取当前id 的所有子集可以看下这个不知道是不是你要的 我之前用过http://blog.csdn.net/u0102656...
多谢邀请:-D,已经有很多答案了,还是贴上我的代码咯:
<?php $search_type = array( array('id'=>1,'name'=>"一级a",'parent_id'=>0), array('id'=>2,'name'=>"一级b",'parent_id'=>0), array('id'=>3,'name'=>"二级a",'parent_id'=>1), array('id'=>4,'name'=>"二级b",'parent_id'=>1), array('id'=>5,'name'=>"二级c",'parent_id'=>1), array('id'=>6,'name'=>"三级a",'parent_id'=>5), array('id'=>7,'name'=>"三级b",'parent_id'=>5), array('id'=>8,'name'=>"四级a",'parent_id'=>7), array('id'=>9,'name'=>"三级c",'parent_id'=>3), array('id'=>10,'name'=>"四级b",'parent_id'=>7), array('id'=>11,'name'=>"三级d",'parent_id'=>2), array('id'=>12,'name'=>"四级c",'parent_id'=>11), array('id'=>13,'name'=>"四级d",'parent_id'=>11), array('id'=>14,'name'=>"三级e",'parent_id'=>2), array('id'=>15,'name'=>"三级f",'parent_id'=>14) ); // 相当于 select * from search_type where parent_id = 0 的结果 function select_where_parent_id( $parent_id, $data_source ) { $results = array(); foreach ($data_source as $value) { if( $value['parent_id'] == $parent_id ) { $results[] = $value; } } return $results; } $childs = array(); // &$childs : 结果对象引用 // $parent_id : 父节点id // $search : 查询对象数据 // $index : 递推深度,方便控制多少层 function get_type(&$childs, $parent_id, $search, $index) { $result = select_where_parent_id( $parent_id, $search ); if( !empty($result) ) { $childs[$parent_id] = $result; foreach ($result as $value) { get_type( $childs, $value['id'], $search, ++$index ); } } } get_type($childs, 0, $search_type, 1); echo json_encode($childs);
递归吧,写了一个不知道对不对,楼下大神请批判
function getLevel($ids) { // 从第二级开始算 static $currLevel = 2; static $rows = []; if(empty($ids)) return $rows; $insql = "'".implode(",",$ids)."'"; $sql = "select id,name,level from level where parent_id in $insql and level = $currLevel"; $st = $pdo->prepare($sql); $st->execute(); $rows[$currLevel] = $st->fetchAll(); getLevel($st->fetchColumn(0)); $currLevel++; } getLevel(1);
function unlimitedForLayer($cate, $child_name = 'child' , $pid_name = 'pid' , $id_name = 'id',$pid = 0){ $arr = array(); foreach ($cate as $v){ if ($v[$pid_name] == $pid){ $v[$child_name] = unlimitedForLayer($cate,$child_name,$pid_name,$id_name,$v[$id_name]); $arr[] = $v; } } return $arr; }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
你是不是想递归获取当前id 的所有子集
可以看下这个不知道是不是你要的 我之前用过
http://blog.csdn.net/u0102656...
多谢邀请:-D,已经有很多答案了,还是贴上我的代码咯:
递归吧,写了一个不知道对不对,楼下大神请批判