在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,但我想知道是否有更好的方法。
感谢。
答案 0 :(得分:13)
str_replace()似乎是一个理想的选择。这只需要运行一次而不是多次。
$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
);
答案 1 :(得分: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%');
答案 2 :(得分: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);
答案 3 :(得分:1)
来自str_replace的PHP手册:
如果搜索且替换是数组,那么 str_replace()从每个值中获取一个值 数组并使用它们进行搜索和 替换主题。如果替换了 比搜索更少的值,然后是 空字符串用于其余部分 替换值。如果搜索是 然后,array和replace是一个字符串 这个替换字符串用于 每一个搜索价值。相反的 但是没有意义。