PHPについての質問です。

変数$fooの中にある文字列から
%1%のような文字列を検索して
変数$hoge[1]の中にある文字列と置換したい場合、どのように記述すればよいのでしょうか。
この時、%n%と$hoge[n]は同じ数字です。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/03/23 00:32:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:heppokoA No.4

回答回数65ベストアンサー獲得回数7

ポイント35pt

正規表現のパターン修飾子に ''e'' をつけるのが早いと思います。

$hoge = array("A","B","C");
$tpl = "Replace %0% %1% %2%";

print preg_replace('/%(\d)%/e','$hoge[\1]',$tpl);

その他の回答3件)

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155

ポイント15pt

$no = 1;

$rep = $foo = str_replace(sprintf("%%%d%%",$no),$hoge[$no],$foo);

str_replace

http://jp.php.net/manual/ja/function.str-replace.php

id:bonlife No.2

回答回数421ベストアンサー獲得回数75

ポイント25pt
<?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);

?>

参考になれば幸いです。

id:nandedarou No.3

回答回数230ベストアンサー獲得回数34

ポイント20pt
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

id:heppokoA No.4

回答回数65ベストアンサー獲得回数7ここでベストアンサー

ポイント35pt

正規表現のパターン修飾子に ''e'' をつけるのが早いと思います。

$hoge = array("A","B","C");
$tpl = "Replace %0% %1% %2%";

print preg_replace('/%(\d)%/e','$hoge[\1]',$tpl);
  • id:kurukuru-neko
    >$rep = $foo = str_replace(sprintf("%%%d%%",$no),$hoge[$no],$foo);

    間違い
    $foo = str_replace(sprintf("%%%d%%",$no),$hoge[$no],$foo);

    文字列生成は嗜好によりは:
    "%" . $no . "%"
    "%{$no}%"
    各種方法があります。
  • id:nandedarou
    (先程のコメントに一部誤記があったので訂正します。)
    私の回答(3番の回答)に補足します。

    2桁以上の数字もありうる場合は、'/%(\d)%/' を次のように変更して下さい。
    '/%([\d]*)%/'
  • id:e23jp
    とても参考になりました。
    全員にいるかをあげたいぐらいです。
    ご回答いただきありがとうございました。
  • id:bonlife
    私も勉強になりました。
    ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません