替换 PHP 中的字符串 - 不适用于更长的字符串

我是php的初学者。


我有这个代码:


function allergen(string $value): string

    {

        $allergens = ['pszenica', 'pszenicy', 'żyto', 'żyta', 'jęczmień', 'jęczmieniem', 'jęczmienia', 'owies', 'owsem', 'owsa', 'orkisz', 'orkiszem', 'orkisza', 'jaja', 'jajka', 'jajo', 'jajecznica', 'jajeczny', 'jajeczna', 'z jajkiem', 'jajko', 'ryby', 'ryb', 'rybne', 'rybny', 'dorsz', 'dorsza', 'dorszem', 'łosoś', 'łososiem', 'łososia', 'mintaj', 'mintajem', 'mintaja', 'makrela', 'makrelą', 'makreli', 'miruna', 'miruną', 'miruny', 'pstrąg', 'pstrągiem', 'pstrąga', 'sola', 'śledź', 'śledziem', 'śledzi', 'sardynki', 'sardynka', 'sardynek', 'sardynkami', 'halibut', 'halibuta', 'halibutem', 'szczupak', 'szczupakiem', 'szczupaka', 'sandacz', 'sandaczem', 'sandacza', 'tuńczyk', 'tuńczyka', 'tuńczykiem', 'kergulena', 'kergulą', 'orzeszki', 'orzechy', 'orzech', 'orzechowy', 'orzechowe', 'orzechami', 'migdały', 'migdałami', 'migdał', 'nerkowce', 'pistacje', 'pistacjami', 'pistacji', 'migdałowe', 'płatki migdałowe', 'płatkami migdałowymi', 'seler', 'z selerem', 'selerowy', 'gorczyca', 'gorczycą', 'gorczycy', 'sezam', 'sezamowe', 'sezamu', 'sezamem', 'musztarda', 'musztardą'];

        if (in_array(mb_strtolower($value), $allergens)) {

            return "<b>$value</b>";

        } else {

            return $value;

        }

    }

当我使用这个功能时它工作正常:


allergen('owies');


(add <b>owies</b>)

但问题是当我有:


allergen('lubie takie owies')

我需要结果:


lubie takie <b>owies</b>

如何修复这个功能?


隔江千里
浏览 112回答 2
2回答

动漫人物

您的示例工作的一种简单方法是创建输入中所有单词的数组,并分别检查每个单词。这是一个例子:function allergen(string $value): string&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $return = "";&nbsp; &nbsp; &nbsp; &nbsp; $allergens = ['pszenica', 'pszenicy', 'żyto', 'żyta', 'jęczmień', 'jęczmieniem', 'jęczmienia', 'owies', 'owsem', 'owsa', 'orkisz', 'orkiszem', 'orkisza', 'jaja', 'jajka', 'jajo', 'jajecznica', 'jajeczny', 'jajeczna', 'z jajkiem', 'jajko', 'ryby', 'ryb', 'rybne', 'rybny', 'dorsz', 'dorsza', 'dorszem', 'łosoś', 'łososiem', 'łososia', 'mintaj', 'mintajem', 'mintaja', 'makrela', 'makrelą', 'makreli', 'miruna', 'miruną', 'miruny', 'pstrąg', 'pstrągiem', 'pstrąga', 'sola', 'śledź', 'śledziem', 'śledzi', 'sardynki', 'sardynka', 'sardynek', 'sardynkami', 'halibut', 'halibuta', 'halibutem', 'szczupak', 'szczupakiem', 'szczupaka', 'sandacz', 'sandaczem', 'sandacza', 'tuńczyk', 'tuńczyka', 'tuńczykiem', 'kergulena', 'kergulą', 'orzeszki', 'orzechy', 'orzech', 'orzechowy', 'orzechowe', 'orzechami', 'migdały', 'migdałami', 'migdał', 'nerkowce', 'pistacje', 'pistacjami', 'pistacji', 'migdałowe', 'płatki migdałowe', 'płatkami migdałowymi', 'seler', 'z selerem', 'selerowy', 'gorczyca', 'gorczycą', 'gorczycy', 'sezam', 'sezamowe', 'sezamu', 'sezamem', 'musztarda', 'musztardą'];&nbsp; &nbsp; &nbsp; &nbsp; $words = explode(' ', $value); // create an array of words&nbsp; &nbsp; &nbsp; &nbsp; foreach($words as $word) { //iterate through words&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (in_array(mb_strtolower($word), $allergens)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $return .= "<b>" . $word . "</b> ";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $return .= $word . " ";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return trim($return); //remove trailing space from the end&nbsp; &nbsp; }&nbsp; &nbsp; echo allergen('lubie takie owies'); // returns: lubie takie <b>owies</b>

智慧大石

这可以用preg_replace()代替来完成in_array()。但是请注意,您需要为$allergens数组中的每个字符串添加分隔符。$string = 'lubie takie owies';$allergens = ['/pszenica/', '/pszenicy/', '/żyto/', '/żyta/', '/jęczmień/', '/jęczmieniem/', '/jęczmienia/', '/owies/', '/owsem/', '/owsa/'];$result = preg_replace($allergens, '<b>$0</b>', $string);var_dump($result);
打开App,查看更多内容
随时随地看视频慕课网APP