@TurinTur

Как найти ближайшее вхождение необходимых символов рядом с нужным ключом?

Как исправить регулярку, чтобы она не искала { в начале, а искала ближайшие к необходимому ключу.

$string = 'Привет {name}, это твой номер - {phone} ?';

$data = [
  'phone' => '223344',
  'name' => 'test'
];

foreach($data as $key => $value) {
    $string = preg_replace("#\{.*?$key\}#s", $value, $string);
}

echo $string;

//На выходе - Привет 223344

//Нужно - Привет test, это твой номер - 223344 ?
  • Вопрос задан
  • 98 просмотров
Решения вопроса 3
Так )
foreach($data as $key => $value) {
    $string = preg_replace("#\{$key\}#su", $value, $string);
}

Ну или без цикла как написал DevMan
$string = 'Привет {name}, это твой номер - {phone} ?';
$data = [
    'phone' => '223344',
    'name' => 'test'
];
echo preg_replace_callback("/{(\w+)}/", function ($matches) use ($data) {
    return @$data[$matches[1]];
}, $string);
Ответ написан
DevMan
@DevMan Куратор тега PHP
не нужны тут циклы от слова вообще - достаточно https://www.php.net/manual/ru/function.preg-replac...

если сами не раздуплитесь, пинганите меня завтра.
Ответ написан
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
У вас есть проблема. Вы решили использовать регулярные выражения чтобы её решить. Теперь у вас две проблемы.


$data = array_combine(
    array_map(function($key) { return '{' . $key . '}'; }, array_keys($data)), //Дописываем к ключам фигурные скобки
    array_values($data)
);

echo strtr($string, $data);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы