Я пытаюсь изменить определенные слова в тексте.
Просто "[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);
}
}
Возврат массива (отдельно):
Почему мой цикл foreach (preg_replace) показывает только первое изображение?
Спасибо за помощь :)
Привет, я не сюрприз. Мой массив хорошо возвращает правильные значения: Array ( [0] => [img]promo1.png[/img] [1] => [img]promo2.png[/img] [2] => [img]promo4.png[/img] [3] => [img]promo3.png[/img] ) , но str_replace, заменяет только первое изображение для других значений массива: /






Фактически вы заменяете все теги [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);
Я думаю вы возьмете только 1 результат
foreach($resultat[1] as $nb_image)