如何用数组替换字符串中的同一个字符串实例?
问题描述:
$replaces = array('replace 1', 'replace thing 2', 'third replace');
$string = '{REPLACEME} sfsfsdfsdf {REPLACEME} sdfopjsd {REPLACEME} sdfsdf {REPLACEME}';
用相应的替换替换每个连续的{REPLACEME}
最简单的方法是什么?如何用数组替换字符串中的同一个字符串实例?
如果有更多{REPLACEME}
比替换,它不应该触及额外{REPLACEME}
的。
所以输出我想用我的例子是:
replace 1 sfsfsdfsdf replace thing 2 sdfopjsd third replace sdfsdf {REPLACEME}
答
foreach($replaces as $rep) {
$string = preg_replace('~\{REPLACEME\}~',$rep,$string,1);
}
答
,这可能是一个快速的想法:
$replaces = array('replace 1', 'replace thing 2', 'third replace');
$string = '{REPLACEME} sfsfsdfsdf {REPLACEME} sdfopjsd {REPLACEME} sdfsdf {REPLACEME}';
$sampler = explode('{REPLACEME}',$string);
foreach($sampler as $k=>$v){
if(isset($replaces[$k])) {
$sampler[$k] .= $replaces[$k]
} else {
$sampler[$k] = '{REPLACEME}' //or whatever
}
}
$final = implode("",$sampler);
//it's ok for not so long strings or at least not to many {REPLACEME}
答
到Catalin Marin’s proposal但没有需要检查是否有类似有足够的替换字符串:
$parts = explode('{REPLACEME}', $string, count($replaces)+1);
for ($i=0, $n=count($parts); $i<$n; $i++) {
$parts[$i] .= $replaces[$i];
}
$string = implode('', $parts);
如果您需要搜索的正则表达式,则可以使用preg_split
而不是explode
。
在相反的该溶液于调用str_replace
/preg_replace
多次连续的优点是:
-
$string
仅用于{REPLACEME}
出现(仅count($replaces)
至多) -
{REPLACEME}
不搜索一次如果出现在$replaces
的前一个替代品中,则替换它。
不错的使用限制参数! – gravelpot 2011-02-01 14:50:20
是啊......我一直在想,为什么str_replace()没有类似的参数... – 2011-02-01 14:51:21