【发布时间】:2012-02-06 10:45:09
【问题描述】:
所以我写了一些代码来制作对 seo 友好的 url。这些函数首先创建一个对 seo 友好的 slug,然后如果 slug 已经存在是 DB(在这种情况下是数组),那么它们会在旁边添加一个带有破折号的数字。如果这也存在,那么他们只需 +1 号码,然后一次又一次地检查......
例如。如果我将“标题 url”传递给函数。首先它将它转换为“title-url”,如果“title-url”已经存在,那么它会添加一个像“title-url-1”这样的数字,如果它也存在那么它将+1像“title-”这样的数字url-2" 然后是 "title-url-3" 等等...
这是代码:
// CONVERTS STRING TO URL SLUG
function str_to_slug($str){
$str = strtolower(trim($str));
$str = preg_replace('/[^a-z0-9-]/', '-', $str);
$str = preg_replace('/-+/', "-", $str);
return $str;
}
// RETURN SLUG URL
function slug($title){
$ori_url = str_to_slug($title);
if( does_slug_exists($ori_url) ){
return loop_slug_number($ori_url, 1);
}
else{
return $ori_url;
}
}
// ADD NUMBER
function loop_slug_number($slug, $number){
if( does_slug_exists($slug.'-'.$number) ){
loop_slug_number($slug, $number++);
exit;
}
else{
return $slug.'-'.$number;
}
}
// CHECKS WHEATHER THE SLUG EXISTS IN THE DB
function does_slug_exists($slug){
$array = array("title", "title-0", "title-1", "title-2");
return (in_array($slug, $array)) ? true : false;
}
我认为一切都应该正常。但是当我回显 slug("title");我来了
Fatal error: Maximum function nesting level of '100' reached, aborting!
错误行号在'return'行的函数dos_slug_exists()中。
(该数组仅作为示例,我将使用 db 验证。)
如果我将数组替换为:
$array = array("title", "title-0", "title-2", "title-3");
然后我得到 title-1。
错在哪里?
【问题讨论】:
-
为什么需要递归调用
loop_slug_number?您也可以使用“while”循环来做到这一点。 -
是的。但是听到了什么问题?
-
问题是“数字”直到
loop_slug_number被调用后才会增加。因此,loop_slug_number总是以“number = 1”调用