php 用大写单词替换描述中的特定单词并循环遍历它

php replace specific words in a description with uppercase words and loop through it

需要用大写搜索词替换针对数组测试的字符串中所有存在的词。

我现在卡在正确的循环中了。

我的代码:

   $array = [
        'weizen',
        'dinkel',
        'gerste',
        'khorasan',
        'eier',
        'haselnuss',
        'walnuss'];

   $description = "Weizenbrötchen auf Hartweizenbasis und Eiern mit Walnusscreme und Haselnusspaste sind leckerer mit Dinkelflocken."

foreach($array as $item) {
if (strpos($description, $item) !== false) {
   // $description;
 echo 
 str_replace($item, mb_strtoupper($item), $description);   
}
}

实际结果: “以硬质小麦为基础的小麦面包卷和鸡蛋配以核桃奶油和榛子酱与 Dinkelflocken.Weizenbr 以硬质小麦为基础的面包更美味,以鸡蛋为基础的核桃奶油和榛子酱与以 Dinkelflocken.Weizenbr 硬质小麦为基础的面包更美味,并且鸡蛋配核桃奶油和榛子酱更美味 Dinkelflocken.Weizenbr硬质小麦小鸡和鸡蛋配核桃奶油和榛子酱更美味 Dinkelflocken.Weizenbr硬粒小麦小鸡和鸡蛋配核桃奶油和榛子酱更美味搭配 SPELLED 薄片更美味。

期望的结果:

以硬粒小麦和鸡蛋为基础的小麦卷搭配核桃奶油和榛子酱,搭配 SPELLED 薄片更美味。

一种方法是用要替换的字符串制作一个正则表达式,然后使用 preg_replace_callback 将任何匹配值转换为大写:

$array = [
        'weizen',
        'dinkel',
        'gerste',
        'khorasan',
        'eier',
        'haselnuss',
        'walnuss'];

$description = "Weizenbrötchen auf Hartweizenbasis und Eiern mit Walnusscreme und Haselnusspaste sind leckerer mit Dinkelflocken.";

$pattern = '/' . implode('|', $array) . '/iu';
echo preg_replace_callback($pattern, function ($m) { return mb_strtoupper($m[0]); }, $description);

输出:

WEIZENbrötchen auf HartWEIZENbasis und EIERn mit WALNUSScreme und HASELNUSSpaste sind leckerer mit DINKELflocken.

Demo on 3v4l.org

使用 array_map 将您的原始数组转换为大写并准备模式,然后使用 preg_replace 来完成:

$array = [
        'weizen',
        'dinkel',
        'gerste',
        'khorasan',
        'eier',
        'haselnuss',
        'walnuss'];

  $description = "Weizenbrötchen auf Hartweizenbasis und Eiern mit Walnusscreme und Haselnusspaste sind leckerer mit Dinkelflocken.";

  $replaces = array_map(function($v){ return strtoupper($v);}, $array);
  $patterns = array_map(function($v){ return '/'.$v.'/i';},$array);

  $str = preg_replace($patterns,$replaces,$description);

  echo $str;