Использование preg_replace в проблеме цикла foreach

Я пытаюсь изменить определенные слова в тексте.

Просто "[img]" bbcode будет повторять коды галереи.

Все в порядке, но цикл foreach возвращает только первое изображение.

Вот мой код:

if (strpos($news['contenu'], '[img]')) {
// Cherche les occurences
preg_match_all('`\[img](.*)\[/img]`U', $news['contenu'], $resultat, PREG_PATTERN_ORDER);

foreach($resultat[1] as $nb_image)
{
    $image = file_get_contents('V:/WP/BDC/uploads/'.$nb_image.'');
    $image_codes = base64_encode($image);   
    $debut_image = '<image src = "data:image/jpg;charset=utf-8;base64,';      
    $fin_image = '" alt = "$1"/>';
    $news = preg_replace('#\[img\](.+)\[/img\]#iUs', $debut_image . $image_codes . $fin_image, $news);

}
}

Возврат массива (отдельно):

  • Promo1.png
  • Promo2.png
  • Promo4.png
  • Promo3.png

Почему мой цикл foreach (preg_replace) показывает только первое изображение?

  • Promo1.png
  • Promo1.png
  • Promo1.png
  • Promo1.png

Спасибо за помощь :)

Я думаю вы возьмете только 1 результат foreach($resultat[1] as $nb_image)

Ingus 23.07.2018 10:54

Привет, я не сюрприз. Мой массив хорошо возвращает правильные значения: Array ( [0] => [img]promo1.png[/img] [1] => [img]promo2.png[/img] [2] => [img]promo4.png[/img] [3] => [img]promo3.png[/img] ) , но str_replace, заменяет только первое изображение для других значений массива: /

Wilfried Peret 23.07.2018 11:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Фактически вы заменяете все теги [img]...[/img] во время первой итерации цикла, поэтому при запуске следующей итерации заменять нечего.

Вы можете использовать аргумент count для preg_replace:

count If specified, this variable will be filled with the number of replacements done.

Итак, ваша замена станет:

$news = preg_replace('#\[img\](.+)\[/img\]#iUs', $debut_image . $image_codes . $fin_image, $news, 1);

Другие вопросы по теме