2012-01-04 11 views
1

私は現在自分のウェブサイトのBBCodeクラスを作成しています。 私は次のことをする必要があります。preg_replace_all()関連の問題

function bbCode([skill]Q[/skill]_________[skill]Q[/skill]_________[skill]Q[/skill]); 

BBコード機能は、すべてのQさん[スキル]と[/スキル]タグの間を交換し、$ skillArray [ 'Q']の値に置き換えることを持っています。 ($ skillArrayは文字に依存します)

どうすればいいですか?

少し明確バージョンは次のとおりです。たとえば

  1. あなたは、「オーク」の文字のページにしています。
  2. [skill] Q [/ skill]タグは自動的に「Orc's Q skill name」を取得する必要があります。
  3. たとえば、「ハンター」のページにいます。
  4. [skill] Q [/ skill]タグは、自動的に「Hunter's Q skill name」を取得する必要があります。

ps。爆発を使用したくない。

$file = file_get_contents ('yourfile.php'); 

$skillArray = array ('Q' => 'Hunter name'); 

foreach ($skillArray as $key => $val) 
{ 
    $file = str_replace ('[skill]' . $key . '[\skill]', $val, $file); 
} 

厥はちょうど:あなたが交換することにしたいタグはあなたが例えば、所望の値に置き換えたいタグ経由のfile_get_contentsを使用して、ループができ、テンプレートのいくつかのフォーム内にあると仮定すると、

+0

Qをすべて置き換えたいのですか、 '[skill]'と '[/ skill]'の間のものを置き換えますか? –

+0

Qは[スキル]と[/スキル]の間にある必要があります。 – Aristona

答えて

1

完全に大まかな例ですが、もし私があなたが何をしようとしているのかを理解していれば、それは右のラインに沿ってでなければなりません....

+0

配列の値が1つしかないため、これは1回だけループします。コメントには15x [skill] Q [/ skill] BBCodeがあります。それは最初のものだけを置き換えます。

一度にすべてを置き換えてもらいたいです。 – Aristona

+0

うん、それはうまくいけば、これはあなたがそれをどのように実装できるかの一例にすぎない。あなたが望むように配列に多くの項目を置くことができ、それはその時にループするでしょう... –

+0

私は同意する必要がありますが、私はそれがpreg_replace_all()のような別の関数で行うことを期待していました。 forループでstr_replaceを実行することは、私が望むことではありません。 :) – Aristona

1

これは、あなたが代わりにQのシングル「ヤフー」を使用して、すべてのQQ+を交換する場合は、

$data = "[skill]Q[/skill]_________[skill]Q[/skill]_________[skill]Q[/skill]"; 
$r['Q'] = "Yahoo"; 
function b($a){ 
    global $r; 
    return $r[$a[1]]; 
} 
$data = preg_replace_callback('|\[skill\](Q)\[\/skill\]|', 'b' , $data); 
var_dump($data); 

を必要とするものです。すべての単語に一致させる場合は、\w+を使用してください。

+0

B関数について説明できますか?前にこのように呼び出されている関数は見られませんでした。

preg_replace_callbackは自動的に2番目の文字列パラメータの関数を呼び出しますか? – Aristona

+0

これは、*一致*をパラメータとして呼び出されるコールバック関数です。 –

1
<?php 
$skillArray=array('Q'=>'fishing'); 
$txt="test [skill]Q[/skill] test"; 
$txt=preg_replace("#\[skill\](.*)\[\/skill\]#e",'$skillArray["$1"]',$txt); 
echo $txt; //test fishing test 
?> 
関連する問題