php заменить указанные c слова в описании на слова в верхнем регистре и l oop через него - PullRequest
1 голос
/ 29 мая 2020

Необходимо заменить ВСЕ существующие слова в строке, которая проверялась на массиве с поисковыми словами в верхнем регистре.

Сейчас я застрял с правильным l oop.

Мой код:

   $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);   
}
}

Фактический результат:"WEIZENbrötchen auf Hartweizenbasis und Eiern mit Walnusscreme und Haselnusspaste sind leckerer mit Dinkelflocken. und Eiern mit WALNUSScreme und Haselnusspaste sind leckerer mit Dinkelflocken. * Weizenbrötchen auf Hartweizenbasis und Eiern mit Walnusscreme und HASELNUSSpaste sind leckerer mit Dinkelflocken **. Weizenbrötchen leckerer 10 * :

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

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Использование 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;
1 голос
/ 29 мая 2020

Один из способов сделать это - создать регулярное выражение из заменяемых строк, а затем использовать 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.

Демо на 3v4l.org

...