2016-04-03 7 views
2

私は、次のコードを持っている:にpreg_replaceと使用価値

<?php 

$clasa = 'HHH'; 
$length = '100'; 
$width = 200; 
$depth = 300; 


$string1 = '{{clasa}}{{length}}{{width}}'; 
$string2 = '{{clasa}}{{length}}{{depth}}'; 
$string3 = '{{clasa}}_word{{length}},anything{{depth}}'; 

$new1 = preg_replace('/{{([a-zA-Z\_\-]*?)}}/', ${'"$1"'}, $string1); 

echo $new1; 

?> 

を私の新しい文字列は、あなたが私の文字列がないことがわかりますように、私は$深度変数を追加したHHH100200

する必要があります常に同じ変数を使用します。 私はこれにかなり近づいていますが、変数名を作成することはできません。

また、私はregexに慣れていません - 私は括弧の中にa-zA-Z0-9を許可したいだけです。ここでは正規表現を使用して

+0

@あなたがしたい、ありがとう'preg_replace_callback()'を見てください。PHPが変数のスコープを持っていることを忘れたくはありません。 – Rizier123

+0

それから私は、私が使用することをまだ知らないものについてグローバルに宣言しなければならないでしょう。 – valiD

+0

はい、それは間違いありませんが、変数変数で行うことができます。 – Rizier123

答えて

1

strtrまたはstr_replaceで配列を使用、移動するための方法ではありません。

$trans = ['{{clasa}}' => 'HHH', 
      '{{length}}' => '100', 
      '{{width}}' => '200', 
      '{{depth}}' => '300']; 

$str1 = strtr($str1, $trans); 
+0

これは私がこれらの変数が将来私が使用するすべてであることを知っていれば、私がそれを気にしなかった方法でした。 – valiD

0

は、変数の変数を使用したい場合はRizier123

<?php 

$clasa = 'HHH'; 
$length = '100'; 
$width = 200; 
$depth = 300; 


$string1 = '{{clasa}}{{length}}{{width}}'; 
$string2 = '{{clasa}}{{lenght}}{{depth}}'; 
$string3 = '{{clasa}}_word{{lenght}},anything{{depth}}'; 

//$new1 = preg_replace('/{{([a-zA-Z\_\-]*?)}}/', ${'"$1"'}, $string1); 
$new1 = preg_replace_callback("/{{([a-zA-Z\_\-]*?)}}/", function($m){ 
    global ${$m["1"]}; 
    return ${$m["1"]}; 
}, $string1); 

echo $new1; 
関連する問題