2014-06-22 250 views
0

我正在创建一个函数,将返回一个基于输入字符串的slu if,如果一个slu exists存在于数据库它将追加一个数字 - $ num,我正在使用codeigniter ,递归函数返回null但var转储返回一个值

当我死了变量它返回_generate_slug正确的slug它返回正确的值,但是当我死在索引函数它返回空白;

这里是我的功能

控制器/ test.php的

public function index() 
{ 
    echo $this->_generate_slug('test'); 
} 

protected function _generate_slug($string,$cntr = 0) 
{ 
    if($cntr == 0){ 

     $slug = create_slug($string); 

    }else{ 

     $slug = create_slug($string).'-'.$cntr; 

    } 

    if($this->test_model->slug_exist($slug)){ 
     $cntr++; 
     $this->_generate_slug($string,$cntr); 

    }else{ 

     return $slug; 
    }  
} 

佣工/ test.php的

function create_slug($string) 
{ 
    $slug = strtolower($string); 
    $slug = str_replace('&','and',$slug); 
    $slug = preg_replace('/[%\'"``]/', '', $slug); 
    $slug = preg_replace('/[^a-zA-Z0-9-]/','-',$slug); 
    $slug = preg_replace("/[-]+/", "-", $slug); 
    $slug = trim($slug, '-'); 

    return $slug; 
} 
+2

为什么你需要为此使用递归?在学术界以外,我通常没有理由这么做。你有没有尝试过这样反复排除? – Zarathuztra

回答

0

你得到NULL,因为你没有在你的递归返回值。它应该是:

return $this->_generate_slug($string,$cntr); 

但是就像它在评论中提到的那样,在这里使用递归是很奇怪的。

另外,我不熟悉CodeIgniter中的代码风格,但是以下划线开头的保护方法的名称似乎是一种不好的做法。