2017-07-25 14 views
-1

文字列内のプレースホルダ変数を動的に置き換えたいのですが。PHPは文字列のプレースホルダ変数を動的に置き換えます。

str_replace("\$", $data["Whatever follows the \$], $variable); 

\$プレースホルダ変数、例えば\$IDを意味します。

置き換えたいデータは配列内にあります。 $\ID$data['ID']に置き換えてください。

たとえば、「IDが\$IDで、名前が\$name」という文字列があるとします。私は\ $ IDと\ $名の両方を、私の$dataオブジェクトの関連するデータに置き換えたいと思います。 $\ID$data['ID']となります。

これは動的である必要があります。 \$ID$data['ID']に置き換えてハードコードしたくありません。 $ data内のデータを取得するために使用されるキーは、\$に続くものと等しくなければなりません。

私はこのように動的に行う方法だけでなく、すべての文字列で\$のためにそれを行うのに問題があります。

+0

なぜprintfを使用しないのですか? –

答えて

0

printf()またはsprintf()を使用します。

プレースホルダに数字を設定した場合は、文字列内で任意の回数繰り返して使用できます。

sprintf("This is my test string. Here's a placeholder: %1$s, and a another: %2$s, First one again: %1$s", $var1, $var2); 
0

これを試してみてください:$values

$string = 'some $ID $PARAM string'; 
$values = array("ID" => "idparam", "PARAM" => "p"); 

preg_match_all("/\\\$(?<name>[a-zA-Z0-9]+)/", $string, $matches); 

foreach($matches["name"] as $m) { 
    if(!isset($values[$m])) { 
     //TODO handling 
     continue; 
    } 
    $string = str_replace('$'.$m, $values[$m], $string); 
} 

var_dump($string); 

鍵はドル記号なしのパラメータの名前でなければなりません。

0

これはあなたのために仕事をします! https://3v4l.org/XRQii

<?php 

$string = 'The ID is \$ID and name is \$name'; 
$row = [ 
    'ID'=> 5, 
    'name' => 'delboy1978uk', 
]; 


function replaceStuff($string, $row) { 
    preg_match_all('#\\$\w+#', $string, $matches); 
    foreach ($matches[0] as $match) { 
     $key = str_replace('$', '', $match); 
     $replace = '\\'.$match; 
     $string = str_replace($replace, $row[$key], $string); 
    } 
    return $string; 
} 

echo replaceStuff($string, $row); 

preg_match_all()詳細はhttp://php.net/manual/en/function.preg-match-all.phpを参照してください。

関連する問題