我的 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/