3

PHP 文字列内の一連の短いタグを置き換える最良の方法は何ですか。例:

$return = "Hello %name%, thank you for your interest in the %product_name%.  %representative_name% will contact you shortly!";

%name% は、次のような配列またはオブジェクトからの特定の文字列であると定義します。

$object->name;
$object->product_name;

等..

文字列に対して str_replace を複数回実行できることはわかっていますが、それを行うためのより良い方法があるかどうか疑問に思っていました。

ありがとう。

4

4 に答える 4

14

置き換える予定のプレースホルダーがわかっている場合、 str_replace() は理想的なオプションのようです。これは、複数回ではなく、1 回だけ実行する必要があります。

$input = "Hello %name%, thank you for your interest in the %product_name%.  %representative_name% will contact you shortly!";

$output = str_replace(
    array('%name%', '%product_name%', '%representative_name%'),
    array($name, $productName, $representativeName),
    $input
);
于 2010-07-03T19:56:05.677 に答える
2

このクラスはそれを行う必要があります:

<?php
class MyReplacer{
  function __construct($arr=array()){
    $this->arr=$arr;
  }

  private function replaceCallback($m){
    return isset($this->arr[$m[1]])?$this->arr[$m[1]]:'';
  }

  function get($s){  
    return preg_replace_callback('/%(.*?)%/',array(&$this,'replaceCallback'),$s);
  }

}


$rep= new MyReplacer(array(
    "name"=>"john",
    "age"=>"25"
  ));
$rep->arr['more']='!!!!!';  
echo $rep->get('Hello, %name%(%age%) %notset% %more%');
于 2010-07-03T21:11:01.020 に答える
2

最も簡単で最短のオプションは、「e」スイッチを使用した preg_replace です。

$obj = (object) array(
    'foo' => 'FOO',
    'bar' => 'BAR',
    'baz' => 'BAZ',
);

$str = "Hello %foo% and %bar% and %baz%";
echo preg_replace('~%(\w+)%~e', '$obj->$1', $str);
于 2010-07-04T00:00:02.710 に答える
1

str_replace の PHP マニュアルから:

検索置換が配列の場合、 str_replace ()は各配列から値を取得し、それらを使用してsubjectの検索と置換を行います。replace の値が search よりも少ない場合、残りの置換値には空の文字列が使用されます。search が配列で replace が文字列の場合、この置換文字列が search のすべての値に使用されます。ただし、その逆は意味がありません。

http://php.net/manual/en/function.str-replace.php

于 2010-07-03T19:53:21.463 に答える