私は親切なURLを作成するためのコードを書いています。これらの関数は、最初に親しみやすいスラッグを作成し、スラッグが既に存在する場合はDB(この場合は配列)で、隣にダッシュを付けた数値を追加します。それが存在する場合は、番号を+1した後、何度も何度も確認します。このループコードで何が問題になっています
例:関数に "title url"を渡すと。最初にそれを "title-url"に変換し、 "title-url"がすでに存在する場合は "title-url-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;
}
私はすべてがうまく動作するはずだと思います。しかし、私はスラグ( "タイトル")をエコーします。私は得ています
Fatal error: Maximum function nesting level of '100' reached, aborting!
エラー行番号は、 'return'行でdoes_slug_exists()関数にあります。
(配列は単なるたとえば、私は、DBの検証を使用しますです。)
私は配列を置き換える場合も:
$array = array("title", "title-0", "title-2", "title-3");
、私はタイトル-1を取り戻します。
どこが間違いですか?
なぜ 'loop_slug_number'の再帰呼び出しが必要ですか?あなたはちょうど同様に "while"ループでそれを行うことができます。 –
はい。しかし、何が問題なのですか? – Ameer
問題は、「数」が「loop_slug_number」が呼び出されるまで増分しないということです。したがって、 'loop_slug_number'は常に" number = 1 "と呼ばれ、 –