PHP使用递归取父类,反向递归一波

作者: 怀老师 | 来源:发表于2020-05-06 17:25 被阅读0次
    //数据不大的情况下,最好一次性查出来,在内存里递归,避免循环查表
    $items = array(
        1 => array('id' => 1, 'pid' => 0, 'name' => '江西省','level'=>0),
        12 => array('id' => 12, 'pid' => 1, 'name' => '赣州市','level'=>1),
        13 => array('id' => 13, 'pid' => 12, 'name' => '赣州','level'=>2),
        14 => array('id' => 14, 'pid' => 13, 'name' => '赣县','level'=>3),
    
     
    );
    //将数据id提到前面作为key,可以节省if条件
    $ids = array_column($items, null,'id');
    
    function test($ids,$id,$level){
        //静态数组,防止数据丢失
        static $list = [];
        //当前值的id和父id,判断父id为0,中止循环
        if($level == 0){
            return false;
        }   
        //存储父类名字和id,自己根据业务需求来
        $pid = $ids[$id]['pid'];
        $list[$level]['name'] = $ids[$pid]['name'];
        $list[$level]['id'] = $ids[$pid]['id'];
        //调用自己,一直到level小于0停止
        test($ids,$ids[$id]['pid'],--$level);
        return $list;
    }
    //假设我们的id为14,根据上面的数组可以得到当前id的level
    $id = 14;
    var_dump(test($ids,$id,$ids[$id]['level']));exit;
    

    输出结果

    array(3) {
      [3] =>
      array(2) {
        'name' =>
        string(6) "赣州"
        'id' =>
        int(13)
      }
      [2] =>
      array(2) {
        'name' =>
        string(9) "赣州市"
        'id' =>
        int(12)
      }
      [1] =>
      array(2) {
        'name' =>
        string(9) "江西省"
        'id' =>
        int(1)
      }
    }
    

    相关文章

      网友评论

        本文标题:PHP使用递归取父类,反向递归一波

        本文链接:https://www.haomeiwen.com/subject/dugwghtx.html