Замена первого вхождения строки на эллемент массива

SN
На сайте с 04.07.2013
Offline
84
468

Есть строка:

$string = " Я не поеду в Москву. Москва замечательный город, но цены в Москве очень высокие.";

Есть массив:

$array = array ( 1 => "Москве", 2 => "Москвой",  3 => "Москва",  4 => "Столица России");

Мне нужно найти в строке самое первое вхождение любого из элементов массива, и обернуть его тегами <b></b>.

В данном примере это "Москва". Хочу получить строку следующего вида:

$string = " Я не поеду в Москву. <b>Москва</b> замечательный город, но цены в Москве очень высокие.";

Сейчас у меня так:

foreach ($array as $value) {
$string = preg_replace("/($value)/", "<b>$1</b>", $string, 1, $count);
if ($count > 0) break;
}

но данный вариант заменяет слово "Москве", т.к. это слово в массиве стоит раньше слова "Москва" ;

http://sandbox.onlinephpfunctions.com/code/e1d5fa903ec4d1eeed1e6902a1908b2f6347f95a

Спасибо!

PA
На сайте с 12.02.2016
Offline
24
#1

<?php
$string = " Я не поеду в Москву. Москва замечательный город, но цены в Москве очень высокие.";
$array = array ( 1 => "Москве", 2 => "Москвой", 3 => "Москва", 4 => "Столица России");
array_map('preg_quote', $array);
$preg = '/('.join('|', $array).')/';
$string = preg_replace($preg, "<b>$1</b>", $string, 1);
echo $string;

upd: http://sandbox.onlinephpfunctions.com/code/66c62fab083136ad25d01e7f4958b1ae9672a6fb

. . .
SN
На сайте с 04.07.2013
Offline
84
#2
ps axf:
<?php

$string = " Я не поеду в Москву. Москва замечательный город, но цены в Москве очень высокие.";
$array = array ( 1 => "Москве", 2 => "Москвой", 3 => "Москва", 4 => "Столица России");
array_map('preg_quote', $array);
$preg = '/('.join('|', $array).')/';
$string = preg_replace($preg, "<b>$1</b>", $string, 1);
echo $string;


upd: http://sandbox.onlinephpfunctions.com/code/66c62fab083136ad25d01e7f4958b1ae9672a6fb

Гениально! Спасибо!!!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий