所以我寫了一些代碼來製作網站友好的網址。這些函數首先創建一個seo-friendly slug,然後如果已經存在的slug是數據庫(在這種情況下是數組),那麼它們會在其旁邊添加一個破折號。如果這也存在,那麼他們只是+1的數字,然後再次檢查...這個循環代碼有什麼問題
例如。如果我通過「標題URL」的功能。首先它會將它轉換爲「title-url」,如果「title-url」已經存在,那麼它會添加一個像「title-url-1」這樣的數字,如果它存在,那麼它會+1這個數字,如「title- URL-2" 然後 「稱號-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;
}
我覺得一切都應該正常工作。但是當我回聲slu((「標題」);我越來越
Fatal error: Maximum function nesting level of '100' reached, aborting!
錯誤行號是在函數does_slug_exists()在'返回'行。
(陣列僅僅是例如我將使用分貝驗證。)
另外,如果我更換與陣列:
$array = array("title", "title-0", "title-2", "title-3");
然後我得到標題-1回。
錯誤在哪裏?
爲什麼你需要遞歸調用'loop_slug_number'?你也可以用「while」循環來完成它。 – 2012-02-06 10:49:45
是的。但是問題聽到了什麼? – Ameer 2012-02-06 10:55:07
問題在於,在調用'loop_slug_number'之後,「數字」纔會增加。因此,'loop_slug_number'總是被稱爲「number = 1」 – 2012-02-06 11:20:58