Как правильно заменить несколько значений переменной в PHP? Приветствую
Сразу отмечу — в PHP не силен. Пытаюсь заменить значения переменной на нужные, но толком ничего не получается, то одно, то другое.
Что я делал:// это наши данные
$content = '
Первая строка
Вторая строка
ВИДЕО:https://www.youtube.com/watch?v=dlkfghn9odnfvbde&t=644s
Третья строка
Четвертая строка
ВИДЕО:https://www.youtube.com/watch?v=bnviufedyfgbvpo9&t=644s
Пятая строка
';
// ищум подстроку / строку
$find = '/ВИДЕО:.*/';
// получаем массив с найденными элементами
preg_match_all($find, $content, $videos);
// перебираем элементы массива и ищем совпадения > меняем
foreach ($videos[0] as $line){
// делим строку по разделителю
$video_url = explode("watch?v=", $line);
// формируем нужный вид (для замены строки)
$video_content = 'ID видео: ' . $video_url[1] . '';
// меняем найденное совпадение на нужноен
$content = preg_replace($line, $video_content, $content);
}
echo $content;
В итоге значение переменной $content должно по задумке преобразоваться в такое:$content = '
Первая строка
Вторая строка
ID видео: dlkfghn9odnfvbde&t=644s
Третья строка
Четвертая строка
ID видео: bnviufedyfgbvpo9&t=644s
Пятая строка
';
Но, как видимо, что-то делаю не так.
Помогите пожалуйста разобраться — что не так и как нужно правильно переписать, чтобы заработало.

21 Авг 2019 в 06:22
209 +1
0
Ответы
1

Проблема в использовании функции preg_replace. Вместо сразу заменять найденное совпадение на нужную строку, нужно сначала найти позицию совпадения в исходной строке, затем заменить его.

Вот исправленный код:

// это наши данные
$content = '
<p>Первая строка</p>
<p>Вторая строка</p>
ВИДЕО:https://www.youtube.com/watch?v=dlkfghn9odnfvbde&t=644s
<p>Третья строка</p>
<p>Четвертая строка</p>
ВИДЕО:https://www.youtube.com/watch?v=bnviufedyfgbvpo9&t=644s
<p>Пятая строка</p>
';
// ищем подстроку / строку
$find = '/ВИДЕО:.*/';
// получаем массив с найденными элементами
preg_match_all($find, $content, $videos);
// перебираем элементы массива и ищем совпадения > меняем
foreach ($videos[0] as $line) {
// делим строку по разделителю
$video_url = explode("watch?v=", $line);
// формируем нужный вид (для замены строки)
$video_content = '<div>ID видео: ' . $video_url[1] . '</div>';
// находим позицию совпадения в исходной строке
$pos = strpos($content, $line);
// заменяем найденное совпадение на нужное
$content = substr_replace($content, $video_content, $pos, strlen($line));
}
echo $content;

Теперь код должен работать правильно и вывести ожидаемый результат.

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 757 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир