为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
隔江千里 2022-07-22 15:55:12
我是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>如何修复这个功能?
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

您的示例工作的一种简单方法是创建输入中所有单词的数组,并分别检查每个单词。这是一个例子:


function allergen(string $value): string

    {

        $return = "";

        $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ą'];

        $words = explode(' ', $value); // create an array of words

        foreach($words as $word) { //iterate through words

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

                $return .= "<b>" . $word . "</b> ";

            } else {

                $return .= $word . " ";

            }

        }

        return trim($return); //remove trailing space from the end

    }


    echo allergen('lubie takie owies'); // returns: lubie takie <b>owies</b>


查看完整回答
反对 回复 2022-07-22
?
智慧大石

TA贡献1946条经验 获得超3个赞

这可以用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);


查看完整回答
反对 回复 2022-07-22
  • 2 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信