递归

递归数据库

获取递归获取上级 数组呈现数据
    /*
     * 递归获取 农机名称信息 (数据中自带等级)
     */
    public function get_equip_name($id)
    {
        $equip_data = $this->MachineryEquipment->where(array('id'=>$id))->find();
        if($equip_data['pid'] != 0){ 
            $new_levae = $levae+1; // 当信息中不存在 等级的时候可以自定义等级
            $equip_data_list = $this->get_equip_name($equip_data['pid']);
        }
        $equip_data_list[$equip_data['level']] = $equip_data;   // 数据中自带等级
        return $equip_data_list;
    }
    
    /*
     * 递归获取 农机名称信息 (数据中不带等级)
     * $levae 等级 可放入已知等级进行3开始-1操作 或者 未知等级从 0开始+1
     */
    public function get_equip_name($id,$levae = 3)
    {
        $equip_data = $this->MachineryEquipment->where(array('id'=>$id))->find();
        if($equip_data['pid'] != 0){ 
            $new_levae = $levae-1;
            $equip_data_list = $this->get_equip_name($equip_data['pid'],$new_levae);
        }
        $equip_data_list[$levae] = $equip_data;
        return $equip_data_list;
    }
// 递归获取商品分类
public function get_category_data($parent_id)
{
    $category_array = $this->Model->query('select * from blogs_category where parent_id = '.$parent_id);
    if(!empty($category_array)){
        // $address_data = $category_array;
        foreach($category_array as $k => $v)
        {
            $category_array[$k]['details'] = $this->get_category_data($v["id"]);
        }
    } else {
        $category_array = '';
    }
    return $category_array;
}
/*
 * 递归获取 下级 网格数据
 **/
public function get_address_id($address_id)
{
    $address_data = $address_id.",";
    $address_id_array = pdo_fetchall('SELECT `id` FROM '.tablename('ewei_shop_grid_address').' WHERE pid = '.$address_id);
    foreach($address_id_array as $k => $v)
    {
    $address_data .= $this->get_address_id($v["id"]);
    }
    return $address_data;
}
/*
 * 递归获取 上级 网格数据
 **/
public function get_superior_address_id($address_id)
{
    $address_data = $address_id.",";
    $pid = pdo_fetch('SELECT `pid` FROM '.tablename('ewei_shop_grid_address').' WHERE id = '.$address_id);
    if($pid['pid'] != 0){ 
        $address_data .= $this->get_superior_address_id($pid['pid']);
    }
    return $address_data;
}
—–获取父级分类—–
function get_parent_id($cid){
    global $db;
    $pids = '';

    $parent_id = $db -> getOne("select parent_id from eload_category where cat_id = '".$cid."'");
    if( $parent_id != '' ){
        $pids .= $parent_id;
        $npids = get_parent_id( $parent_id );
        if(isset($npids))
            $pids .= ','.$npids;
    }
    return $pids;
}
————获取子集分类————
function get_category( $category_id ){
    global $db;

    $category_ids = $category_id.",";
    $child_category = $db -> arrQuery("select cat_id from eload_category where parent_id = '$category_id'");
    foreach( $child_category as $key => $val )
        $category_ids .= get_category( $val["cat_id"] );
    return $category_ids;
}


递归数组

递归无限极分类就是自身调用自身进行循环操作,有两种办法一种是通过等级另一种是通过数据结构进行数据循环

public function roles($data,$pid=0,$levae=0)
{
    //$data为自己查询出来的数组$pid=0表示父级id$leave表示等级
    //进行if判断,判断数据类型
    if(!is_object($data) && !is_array($data))
    {
        return [];
    }
    //将数据转换成数组
    $d=json_decode(json_encode($data),true);
    $array=array();
    //将数据进行foreach循环
    foreach ($d as $key=> $value)
    {
        //判断等级为0的作为父级
        if($value['p_id']==$pid)
        {
            //在数组中添加一个字段作为等级当数据进行前台遍历是作为判断依据,在通过数据结构的方法中这个字段可以不用添加
            $value['levae']=$levae;
            //将数据放到数组中
            $array[$key]=$value;
            //调用本身将数据进行接收
            $array[$key]['son']=$this->roles($d,$value['id'],$levae+1);
        }
    }
    return $array;
}

第二种方式

//将数据转换为数组

$data=json_decode(json_encode($data),true);
public function getRoles($data,$pid=0,$levae=0)
{
    static $array=array();
    foreach ($data as $key=> $value)
    {
        if($value['p_id']==$pid)
        {
            $value['levae']=$levae;
            $array[]=$value;
            $this->roles($d,$value['id'],$levae+1);
        }
    }
    return $array;
}

 第二种方式 通第一种方法相似但是第二种是通过$levae得等级来判断以此将数据的层级显示出来