在foreach循环问题中使用preg_replace

时间:2018-07-23 08:52:18

标签: php

我正在尝试更改文本中的特定单词。

只需“ [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 个答案:

答案 0 :(得分:0)

实际上,您是在循环的第一次迭代期间替换所有[img]...[/img]标签,因此在下一次迭代开始时没有任何替换内容。

您可以将count的{​​{1}}参数用作:

  

个   如果指定,此变量将填充已完成的替换次数。

所以您的替换项变为:

preg_replace