Как правильно заменить несколько значений переменной в 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
234 +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 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир