php - 如何使用递归函数返回 true

标签 php mysql arrays codeigniter recursion

我的 CI 模型中有以下递归函数,可以正常工作。 在我的 Controller 中,我需要检查功能是否正常工作,例如:

if($this->my_model->level_corrector($id_page,$level)) echo 'Levels are corrected';

但是由于该函数总是返回 false(以结束递归),我不知道如何实现我的目标。

  function level_corrector($id_page_of_parent,$level_of_parent)
  {
    $sql = "
    SELECT id_page, id_parent, level
    FROM page 
    WHERE id_parent = $id_page_of_parent";
    $query = $this->db->query($sql);

    if($query->num_rows() > 0)
    {
      $result = $query->result_array();          
      foreach ($result as $r)
      {
        $data = array('level'=>$level_of_parent+1);
        $this->db->where('id_page', $r['id_page']);
        if($this->db->update('page', $data))
        {
           $this->level_corrector($r['id_page'],$level_of_parent+1);
        }
        else
        {
           // let me handle it what to do
           return false;
        }
      }
    }
    else
    { //  again let me handle it to log a message or sth
       return false; // (2)
    }
    return true; // (3) means it all gone right, so I can move on.
  }

最佳答案

你需要做两件事:

  • 如果有错误,则返回 false。否则,在函数结束时,默认返回true

  • 如果递归调用该函数时发生错误,则返回 false。

编辑:根据您在评论中对我的问题的回答,您想要的是:

function level_corrector($id_page_of_parent,$level_of_parent)
{
  $sql = "
  SELECT id_page, id_parent, level
  FROM page 
  WHERE id_parent = $id_page_of_parent";
  $query = $this->db->query($sql);

  if($query->num_rows() > 0)
  {
    $result = $query->result_array();          
    foreach ($result as $r)
    {
      $data = array('level'=>$level_of_parent+1);
      $this->db->where('id_page', $r['id_page']);
      if($this->db->update('page', $data))
      {
         // no error. return error code from recursive call
         return $this->level_corrector($r['id_page'],$level_of_parent+1);
      }
      else
      {
         // error occured
         return false;
      }
    }
  }

  // $query->num_rows <= 0. This is not an error, so return true:
  return true;
}

关于php - 如何使用递归函数返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9810771/

相关文章:

javascript - 倍数订单数量x价格并显示小数点后两位

c - 制作一个程序来实现与数组一起使用的函数

php - WooCommerce:如何在管理产品列表中的产品名称旁边添加产品类型

php - 构造SQL语句时插值(使用{}波浪括号)和拼接(.,或点)的区别

php - 通过 MYSQL 验证 PHP 密码时出现问题

mysql - 多重连接中的评分算法

python - 如何从 numpy 二维数组中提取子数组?

php - 数组键存在于多维数组中

php - 如何用空格和换行符分解字符串?

javascript - 在空白数组中添加项目,Javascript显示项目