Используйте ассоциативные массивы с заменой preg
В документации для preg_replace говорится, что вы можете использовать индексированные массивы для замены нескольких строк. Я хотел бы сделать это с ассоциативными массивами, но, похоже, это не работает.
Кто-нибудь знает, действительно ли это не работает?
3 answers
Вы хотите сделать это с ключами или ключами и значениями или просто сохранить ключи и обработать значения? В зависимости от обстоятельств, 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;
}
Если я правильно понимаю, вы хотите:
$patterns = array_keys($input);
$replacements = array_values($input);
$output = preg_replace($patterns,$replacements,$string);
Потратил на это довольно много времени, поэтому добавлю свой ответ
$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 - это граница слова.