2013-09-24 2 views
0

Namaste, все. Поэтому я схватил этот очень полезный фрагмент из php.net и изменил его.PHP реализует preg_match с массивом, затем preg_replace совпадения

$cat = strip_tags(trim($_POST["cat"])); 
$joke = strip_tags(trim($_POST["joke"])); 
$patterns = array(); 
$patterns[0] = '/quick/'; 
$patterns[1] = '/brown/'; 
$patterns[2] = '/fox/'; 
$replacements = array(); 
$replacements[0] = 'bear'; 
$replacements[1] = 'black'; 
$replacements[2] = 'slow'; 

echo preg_replace($patterns, $replacements, $joke); 

Этот код работает отлично. Каждый раз, когда присутствует какое-либо из слов в массиве $ patterns, они заменяются соответствующей заменой $.

Сначала я хотел бы запустить preg_match на $ pattern, и если есть соответствие, установите переменную с именем $ status в true и запустите preg_replace. Но если нет preg_match, я бы хотел иметь else, если это говорит иначе, если нет соответствия $ status false.

Можно ли запустить preg_match в моем массиве $ patterns, как я его настроил сейчас? Если да, как я могу это сделать? Я хотел бы запустить preg_match в существующем массиве, чтобы уменьшить количество написания кода для второго массива, который будет содержать только одни и те же слова.

Благодаря

ответ

0

Вариант 1:

$joke2 = preg_replace($patterns, $replacements, $joke); 
$status = ($joke == $joke2) ? 'green' : 'red'; 

Вариант 2:

$matches = array_filter($patterns, function($a) use($joke) { return preg_match($a, $joke); }); 
if (!empty($matches)) { 
    $status = 'red'; 
    $joke2 = preg_replace($patterns, $replacements, $joke); 
} else { 
    $status = 'green'; 
} 

Что вы спрашиваете, вариант 2, но имхо это слишком сложно

+0

Как бы вы это сделать, то ? Мне нужно проверить слова, и если они присутствуют, замените их и установите переменную, чтобы сообщить мне, что слова были заменены. Если совпадений не было, ничего не нужно было заменять, и мне нужно было это знать и по линии. – stevenmw

Смежные вопросы