如下图:
parent_id为0的表示第一级,我现在传递了一个第一级的id(主键),怎么查找到该第一级下面所有所属的子级,要求获取的子级的名称和子级的id,我尝试写了很多,一直不成功。希望有大神帮忙一下,多谢多谢。
如下图:
parent_id为0的表示第一级,我现在传递了一个第一级的id(主键),怎么查找到该第一级下面所有所属的子级,要求获取的子级的名称和子级的id,我尝试写了很多,一直不成功。希望有大神帮忙一下,多谢多谢。
多谢邀请:-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;
}
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答670 阅读✓ 已解决
2 回答588 阅读✓ 已解决
你是不是想递归获取当前id 的所有子集
可以看下这个不知道是不是你要的 我之前用过
http://blog.csdn.net/u0102656...