###前提・実現したいこと
文字列の{}内の定数・変数が定義されている場合再評価する処理を書きました。
処理自体は上手くいったものの、かなり回りくどい方法になってしまいました。
調べても同例のケースが見つからず、最適な方法を知りたいです。
※PHP5.2以上で動作
###該当のソースコード
php
1$a = 'あ'; 2$b = 'い'; 3$c = 'う'; 4define('あああ','えお',true); 5$str = '{$a}{$b}{$c}{$d}{あああ}{あいう}$aaaaa$a'; 6 7function with($v){ 8 return $v; 9} 10$with = "with"; 11 12$str = str_replace('$','\$',$str); 13preg_match_all("/{(.*?)}/", $str, $result); 14 15$var_all = get_defined_vars(); 16foreach($result[1] as $value) { 17 if(substr($value, 0, 2) != '\$') { 18 if(defined($value)) { 19 $str = str_replace('{'.$value.'}','{$with('.$value.')}',$str); 20 } 21 }else if(array_key_exists(ltrim($value,'\$'),$var_all)) { 22 $str = str_replace('{'.$value.'}','{$'.ltrim($value,'\$').'}',$str); 23 } 24} 25 26echo $str."\n"; 27eval("\$str = \"$str\";"); 28echo $str."\n";
結果
html
1{$a}{$b}{$c}{\$d}{$with(あああ)}{あいう}\$aaaaa\$a 2あいう{$d}えお{あいう}$aaaaa$a
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/21 10:15