2011-02-01 106 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的前一個替代品中,則替換它。
相關問題