2013-03-16 2 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

Только «замена» будет быстрее - ей не нужно дважды сопоставлять. Вы протестировали его? Является ли более медленное решение слишком медленным? – Bergi

+0

Почему вы «ломаете» цикл после первого шаблона? – Bergi

ответ

4

preg_replace принимает массив аргументы для шаблона и замены.

preg_replace(array_keys($patters), array_values($patterns), $string); 
Смежные вопросы