codeigniter 如何将递归函数中的值以不同的方法传递到数组中[重复]

yquaqz18  于 2023-05-04  发布在  其他
关注(0)|答案(2)|浏览(113)

此问题已在此处有答案

How to use return inside a recursive function in PHP(4个答案)
14小时前关闭
我正在努力将一个值从一个递归函数传递到一个不同方法中的数组中。我在下面写了我的递归函数。

function get_parent_basket_id($parent_id) {            

    if($parent_id==NULL){
        return false;
    }

    $baskets = $this->Model_cds_clients->clients($parent_id)->result();

    if(count($baskets)==0){
        return false;
    }

    foreach ($baskets as $row) {    

        if($row->parent_id==0){
            return $row->id;
       } else {
           $this->get_parent_basket_id($row->parent_id);
       }    
    } 
}

我的Model_cds_clients代码如下

function clients ($parent_id) {
    $this->db->select('endpoint, parent_id');
    $this->db->from('cds_clients');
    $this->db->where('parent_id', $parent_id);
    $this->db->where('active', 1);                
    $result = $this->db->get();

    return $result;
}

模型的表结构如下所示

id - int(11)
name - varchar(255)
endpoint - varchar(64)
active - tinyint(1)
parent_id - int(11)

下面是我的函数,我需要将变量传递到endpoints数组下的client_id中。

public function __construct() {

    parent::__construct();
    $this->load->model('Model_story'); 

    $this->get_parent_basket_id($parent_id);

    $data = array(
        'basket_id' => $this->basketId,
        'story_id' => $this->storyId,
        'payload' => $this->xmlString,                 
        'endpoints' => array(
                           array(
                               'client_id' => XXXX,
                               'endpoint_url' => 'http://www.example.com/consume.php'
                           ), )
    );

    $json_payload = json_encode($data);

请帮帮我

xam8gpfp

xam8gpfp1#

我不确定这是不是你要找的,但这就是我要找的
变更:

foreach ($baskets as $row) {    

    if($row->parent_id==0){
        return $row->id;
   } else {
       $this->get_parent_basket_id($row->parent_id);
   }    
}

致:

foreach ($baskets as $row) {    

    if($row->parent_id==0){
        return $row->id;
   } else {
      return $this->get_parent_basket_id($row->parent_id);
   }    
}

在你的递归函数中。这样,ID实际上会被传递回来。
然后,在控制器中,将结果分配给一个变量,即

$parent_basket_id = $this->get_parent_basket_id($parent_id);

然而,看起来你并没有声明/传递$parent_id到__construct(),所以我不确定这是如何工作的。
希望这个有帮助!

olhwl3o2

olhwl3o22#

尾递归的基本情况看起来不太正确。您的直接调用需要返回结果。我已经重构了你的方法如下:

function get_parent_basket_id($parent_id) {            

    if(!$parent_id){

        return false;

    }

    // Your method chaining is missing brackets on $this->Model_cds_clients()
    $baskets = $this->Model_cds_clients()->clients($parent_id)->result();

    if(!count($baskets)){

        return false;

    }

    foreach ($baskets as $row) {    
    
        if(!$row->parent_id){

            return $row->id;

        } else {

        // Add a return here
        return $this->get_parent_basket_id($row->parent_id);

       }    
    } 
}

相关问题