変数$fooの中にある文字列から
%1%のような文字列を検索して
変数$hoge[1]の中にある文字列と置換したい場合、どのように記述すればよいのでしょうか。
この時、%n%と$hoge[n]は同じ数字です。
正規表現のパターン修飾子に ''e'' をつけるのが早いと思います。
$hoge = array("A","B","C"); $tpl = "Replace %0% %1% %2%"; print preg_replace('/%(\d)%/e','$hoge[\1]',$tpl);
$no = 1;
$rep = $foo = str_replace(sprintf("%%%d%%",$no),$hoge[$no],$foo);
str_replace
<?php $foo = 'foo%0%foo%1%foo%2%foo%3%foo%4%foo%5%foo%4%foo%3%foo%2%foo%1%foo%0%'; $hoge = array("A","B","C","D"); $counter = 0; foreach ( $hoge as $replacement ) { $pattern = '/%' . $counter . '%/'; $foo = preg_replace($pattern, $replacement, $foo); $counter += 1; } print_r($foo); ?>
参考になれば幸いです。
function Conv($n){ global $hoge; return $hoge[ $n[1] ]; } $foo = preg_replace_callback('/%(\d)%/', 'Conv', $foo);
こんなのでも、できます。
http://jp.php.net/manual/ja/function.preg-replace-callback.php
正規表現のパターン修飾子に ''e'' をつけるのが早いと思います。
$hoge = array("A","B","C"); $tpl = "Replace %0% %1% %2%"; print preg_replace('/%(\d)%/e','$hoge[\1]',$tpl);
コメント(4件)
間違い
$foo = str_replace(sprintf("%%%d%%",$no),$hoge[$no],$foo);
文字列生成は嗜好によりは:
"%" . $no . "%"
"%{$no}%"
各種方法があります。
私の回答(3番の回答)に補足します。
2桁以上の数字もありうる場合は、'/%(\d)%/' を次のように変更して下さい。
'/%([\d]*)%/'
全員にいるかをあげたいぐらいです。
ご回答いただきありがとうございました。
ありがとうございます。