2017-01-31 2 views
1

文字列内のプレースホルダを置き換えるシステムで作業しています。PHPでの動的値/プレースホルダの検索と置換

文字列の例:数は、私は私のデータベースに探しにする必要がありますIDを参照する場所

$string = 'Meatloaf beef landjaeger porchetta swine t-bone boudin salami doner turkey capicola. [IMG1] Pork loin doner capicola chicken filet mignon. Swine sausage sirloin short ribs bresaola bacon picanha kielbasa fatback. Andouille turducken pastrami, beef ribs bacon chicken biltong t-bone pancetta spare ribs shankle pork belly ground round brisket. Pastrami pork t-bone bresaola shoulder. Landjaeger short ribs tenderloin kielbasa, [IMG3] shank picanha spare ribs pig chuck. Sausage pastrami [billede1] kielbasa pig meatloaf t-bone shankle jowl tongue ham hock tail cow.'; 

各文字列は、[IMG1]が含まれます。

ですから、各IDを見つけて、代わりに各「タグ」を画像URLに置き換えることが目的です。

  • 文字列を反復処理して、タグを取得して新しい値を配置するにはどうすればよいですか?

  • 各文字列は、[IMG +乱数]で別のプレースホルダを持つことになりますので、私は、各IDを見つける必要があるので、私はイメージ名など

+1

? – RomanPerekhrest

+0

置き換えの値は単純に "hotdog.jpg"のようなものになります – JulianNikolaz

答えて

0

は、そうでなければDBクエリが各見つかったプレースホルダのために送信されるべき、予め "置換リスト"(ルックアップテーブル)を定義します。
preg_replace_callback関数を用いて溶液:

$lookup_list = [ 
    'IMG1' => 'image1.jpg', 
    'IMG2' => 'image2.jpg', 
    'IMG3' => 'image3.jpg', 
]; 

$string = 'Meatloaf beef landjaeger porchetta swine t-bone boudin salami doner turkey capicola. [IMG1] Pork loin doner capicola chicken filet mignon. Swine sausage sirloin short ribs bresaola bacon picanha kielbasa fatback. Andouille turducken pastrami, beef ribs bacon chicken biltong t-bone pancetta spare ribs shankle pork belly ground round brisket. Pastrami pork t-bone bresaola shoulder. Landjaeger short ribs tenderloin kielbasa, [IMG3] shank picanha spare ribs pig chuck. Sausage pastrami [billede1] kielbasa pig meatloaf t-bone shankle jowl tongue ham hock tail cow.'; 

$replaced = preg_replace_callback("/\[(\w+)\]/", function($m) use($lookup_list) { 
    return (isset($lookup_list[$m[1]]))? $lookup_list[$m[1]] : $m[0]; 
}, $string); 


print_r($replaced); 

出力: `[IMG1]`などの代替値が何であるか

Meatloaf beef landjaeger porchetta swine t-bone boudin salami doner turkey capicola. image1.jpg Pork loin doner capicola chicken filet mignon. Swine sausage sirloin short ribs bresaola bacon picanha kielbasa fatback. Andouille turducken pastrami, beef ribs bacon chicken biltong t-bone pancetta spare ribs shankle pork belly ground round brisket. Pastrami pork t-bone bresaola shoulder. Landjaeger short ribs tenderloin kielbasa, image3.jpg shank picanha spare ribs pig chuck. Sausage pastrami [billede1] kielbasa pig meatloaf t-bone shankle jowl tongue ham hock tail cow. 
+0

文字列を置換する前に、DBからすべてのimg情報を取得するのがベストでしょう。 – JulianNikolaz

+0

これは一度に何回置き換えを行うべきかによって異なります。 – RomanPerekhrest

+0

通常はテキストに応じて3から8になりますが、大部分の場合は – JulianNikolaz

0

割り当てURLの私のDBを検索するためにそれを使用することができます値を変数に追加し、タグの代わりに文字列に変数を挿入します。

$IMG1 = "<some url>"; 
$string = "Meatloaf beef landjaeger porchetta swine t-bone boudin salami doner turkey capicola. [$IMG1]"; 
+0

プレースホルダの名前を事前に知ることはできません。そのため、プレースホルダの値の文字列を "スキャン"する必要があります。一部の文字列では[IMG213]になり、他の文字列とは異なります。それでは必ずしも[IMG1]、[IMG2]などではありません。 – JulianNikolaz

0

preg_replace_callback()関数を使用してみてください:

<?php 
$string = 'Meatloaf beef landjaeger porchetta swine t-bone boudin salami doner turkey capicola. [IMG1] Pork loin doner capicola chicken filet mignon. Swine sausage sirloin short ribs bresaola bacon picanha kielbasa fatback. Andouille turducken pastrami, beef ribs bacon chicken biltong t-bone pancetta spare ribs shankle pork belly ground round brisket. Pastrami pork t-bone bresaola shoulder. Landjaeger short ribs tenderloin kielbasa, [IMG3] shank picanha spare ribs pig chuck. Sausage pastrami [billede1] kielbasa pig meatloaf t-bone shankle jowl tongue ham hock tail cow.'; 


$string = preg_replace_callback(
'/\[.*?\]/', 
function ($matches) { 
    if(stristr($matches[0], '[IMG') !== FALSE) { 
     $tag = substr($matches[0],1,-1); 
     $id = (int)str_replace('IMG','',$tag); 
     return "<img src='imageurl-".$id."'>"; 
    }elseif($matches[0] == '[billede1]'){ 
     return "billede1-REPLACED"; 
    } 

}, 
    $string 
); 

echo $string;