2010-01-01 3 views
2

В документации для preg_replace говорится, что вы можете использовать индексированные массивы для замены нескольких строк. Я хотел бы сделать это с помощью ассоциативных массивов, но, похоже, это не работает.Использование ассоциативных массивов с preg_replace

Кто-нибудь знает, действительно ли это действительно не работает?

+0

Смотрите эту ссылку [Pre_REPLACE с Asscoiate массива] [1] [1]: http://stackoverflow.com/questions/17979011/use-preg-replace-to-replace-whole-words -при-ассоциативно-массив –

ответ

5

Вы хотите сделать это на клавишах или клавишах и значениях или просто сохранить ключи и обработать значения? В любом случае, array_combine(), array_keys() и array_values() могут достичь этого в сочетании.

На ключей:

$keys = array_keys($input); 
$values = array_values($input); 
$result = preg_replace($pattern, $replacement, $keys); 
$output = array_combine($result, $values); 

На ключей и значений:

$keys = array_keys($input); 
$values = array_values($input); 
$newKeys = preg_replace($pattern, $replacement, $keys); 
$newValues = preg_replace($pattern, $replacement, $values); 
$output = array_combine($newKeys, $newValues); 

О значениях подпорные ключей:

$keys = array_keys($input); 
$values = array_values($input); 
$result = preg_replace($pattern, $replacement, $values); 
$output = array_combine($keys, $result); 

Все они предполагают функцию что-то вроде:

function regex_replace(array $input, $pattern, $replacement) { 
    ... 
    return $output; 
} 
1

Если я понимаю, это правильно, что вы хотите:

$patterns = array_keys($input); 
$replacements = array_values($input); 
$output = preg_replace($patterns,$replacements,$string); 
0

потратил довольно много времени на это так добавит мой ответ

$str = "CT is right next to NY"; 

$list = array('CT'=>'connenticut', 'NY'=>'New York', 'ME' => 'Maine'); 
$list = get_json(); 

$pattern = array_keys($list); 
$replacement = array_values($list); 

foreach ($pattern as $key => $value) { 
    $pattern[$key] = '/\b'.$value.'\b/i'; 
} 

$new_str = preg_replace($pattern,$replacement, $str); 

Убедитесь, что вы используете/разделители/для соответствия шаблону регулярного выражения. \ b для границы слова.

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