2013-03-16 60 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);