2016-07-12 8 views
-1

@Sometihngのようなユーザーを探すためにPHPで関数を作成しようとしていますが、それらのプロファイルへのリンクを文字列に入れますが、使用するときはを返します。 userTags()を再宣言できません。あなたはどこに問題があるのか​​、何が間違っているのか知っていますか?ここに私のコードです。助けてくれてありがとう。PHPの再帰関数は致命的なエラーを返します

$comment = "Hey @Name how are you?? And how is @AnotherName. Also have you seen @SomeName ??"; 

function userTags($startFrom) { 

    $pos = strpos($comment, '@', $startFrom);  

    if ($pos !== false) { 

     $pos1 = strpos($comment, ' ', $pos); 

     if ($pos1 !== false) { 

      $insert_string = '<a href="profile.php?owner=somewhere">'; 
      $insert_string1 = "</a>"; 

      $comment = substr_replace($comment, $insert_string1, $pos1, 0); 
      $comment = substr_replace($comment, $insert_string, $pos, 0); 

      userTags($pos1); 
     } 
    } 
} 
+3

userTags関数を再宣言しようとしているようです。たぶん同じファイルを2回含むのでしょうか? require/includeの代わりにrequire_onceまたはinclude_onceを試してください – rjdown

+0

エラーメッセージには、関数 'userTags()'を2回定義しましたが、これは許可されていません。たぶん同じスクリプトに複数回含まれているファイルで一度だけ定義したのでしょうか? (おそらく間接的な包含を介してですか?) – axiac

+1

問題はあなたが投稿したコードにありません。 –

答えて

0

代わりに正規表現を試してください。 :) '/(?<!\w)@\S+/'は@characterで始まるすべての単語を抽出します。

$comment = "Hey @Name how are you?? And how is @AnotherName. Also have you seen @SomeName ??"; 

preg_match_all('/(?<!\w)@\S+/', $comment, $matches); 
print_r($matches[0]); 
+0

すべての抽出された単語の前に追加してタグとそれの後ろにというタグを付けてコメント文字列に戻すのは難しいですか? –

+0

これは '$ updated_comment = preg_replace( '/(@(\ w +))/'、 ' \ 1'、$ comment);'返されます: 'Hey @Nameどうですか?そしてどのように @AnotherNameです。また、あなたは @ SoomeName ?? 'を見たことがあります。その後、PHP関数' str_replace() 'を使うことができます。私は純粋な正規表現の解決策を見つけるかもしれませんが、それは私の多くの時間がかかります。 – Michal

+0

また、文中の各変数のリンクに固有のhrefが必要なので、 'str_replace(" @name "、" $name "、$ updated_comment)'を使う方が良いでしょう。 '$ comment'で見つけたすべての変数に対して、' $ updated_comment'のループを使ってください。 :) – Michal

0

関数がwhileループに配置され、複数回宣言されました。

関連する問題