2013-03-16 58 views
1

我需要在陣列某種模式來替換字符串,如果需要的模式存在:僅使用preg_replace()或組合preg_match()和preg_replace()?

$patterns = [ 
    'PATTERN#1' => 'REPLACE#1', 
    'PATTERN#2' => 'REPLACE#2', 
]; 

$string = 'SOME STRING TO PREG_REPLACE'; 

哪種方式會更快:

// PREG_REPLACE ONLY FOR MATCHED PATTERN: 
foreach ($patterns as $pattern => $replace) { 
    if (preg_match($string, $pattern)) { 
     preg_replace($pattern, $replace, $string); 
     break; 
    } 
} 

// PREG_REPLACE FOR ALL PATTERNS: 
foreach ($patterns as $pattern => $replace) { 
    preg_replace($pattern, $replace, $string); 
    break; 
} 
+0

只有'replace'會更快 - 它不需要匹配兩次。你測試過了嗎?更簡單的解決方案太慢了嗎? – Bergi 2013-03-31 15:04:45

+0

爲什麼你會打破第一個模式後的循環? – Bergi 2013-03-31 15:05:57

回答

4

preg_replace需要陣列模式和替換的參數。

preg_replace(array_keys($patters), array_values($patterns), $string);