PHP无限分类查找
PHPz
PHPz 2017-04-11 09:11:36
[PHP讨论组]

如下图:

parent_id为0的表示第一级,我现在传递了一个第一级的id(主键),怎么查找到该第一级下面所有所属的子级,要求获取的子级的名称和子级的id,我尝试写了很多,一直不成功。希望有大神帮忙一下,多谢多谢。

PHPz
PHPz

学习是最好的投资!

全部回复(4)
大家讲道理

你是不是想递归获取当前id 的所有子集
可以看下这个不知道是不是你要的 我之前用过
http://blog.csdn.net/u0102656...

PHP中文网

多谢邀请:-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;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号