2

我已经编写了一个带有while循环的函数,用于从PHP中的DB获取递归父类,它实现了我的目的。但我想知道(实际上很想知道)我怎样才能通过递归函数来做到这一点?如果是,那怎么办?它所做的只是使用 categoroy_id 返回一个父类别数组。如果有不清楚的地方,请告诉我。

public function get_recursive_parents($category_id){
        $categories = array();
        $res = $this->db->from('categories')->where('cat_id',$category_id)->get()->row_array();
        $cat_id = $res['parent_id'];
        $categories[] = $res;
        while($cat_id){
            $res = $this->db->from('categories')->where('cat_id',$cat_id)->get()->row_array();
            $categories[] = $res;
            $cat_id = $res['parent_id'];
        }
        return $categories;
    }
4

3 回答 3

2

我没有测试过代码,所以我不确定它是否正确:

<?php

public function get_recursive_parents($category_id) {
    $categories = array();
    __get_recursive_parents($res['parent_id'], $categories);

    return $categories;
}

public function __get_recursive_parents($cat_id, &$output){
   $res = $this->db->from('categories')->where('cat_id',$cat_id)->get()->row_array();
   $output[] = $res;
   if ($res['parent_id']) {    
       __get_recursive_parents($res['parent_id'], $output);
   }
}
于 2013-02-13T12:55:27.423 回答
0

要将其转换为递归函数,它应该像这样工作(未经测试,但逻辑应该相似)。

public function get_recursive_parents($category_id){
        $categories = array();
        $res = $this->db->from('categories')->where('cat_id',$category_id)->get()->row_array();
        $cat_id = $res['parent_id'];
        $categories[] = $res;
        while($cat_id) {
            $categories[] = get_recursive_parents($cat_id);
        }
        return $categories;
    }
于 2013-02-13T12:41:36.423 回答
-1

递归函数中的数据库查询?你的 DBA 可能会把你从后面带走并开枪打死你。

于 2013-02-13T12:55:35.330 回答