2011-02-01 191 views
1
$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} 

回答

8
foreach($replaces as $rep) { 
    $string = preg_replace('~\{REPLACEME\}~',$rep,$string,1); 
} 
+0

不错的使用限制参数! – gravelpot 2011-02-01 14:50:20

+0

是啊......我一直在想,为什么str_replace()没有类似的参数... – 2011-02-01 14:51:21

2

,这可能是一个快速的想法:

$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} 
1

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的前一个替代品中,则替换它。
相关问题