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

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

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

PHP
慕慕森 2022-08-05 15:49:44
我是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贡献1839条经验 获得超15个赞

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


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-08-05
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

这可以通过 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-08-05
  • 2 回答
  • 0 关注
  • 73 浏览

添加回答

举报

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