将while循环转换为递归函数,同时返回数组

时间:2013-02-13 12:33:15

标签: php recursion

我已经编写了一个带有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;
    }

3 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

我还没有对代码进行测试,所以我不确定它是否正确:

<?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);
   }
}

答案 2 :(得分:-1)

递归函数中的数据库查询?你的DBA可能会把你带回去拍你。