Функция замены строки не всегда работает - PullRequest
0 голосов
/ 13 февраля 2020

Я новичок в PHP и Laravel.

У меня есть этот код:

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ą', 'gluten', 'glutenem', 'glutenu', 'pszenica', 'pszenicy', 'pszenicą', 'pszenicę', 'pszenny', 'pszenna', 'pszenny', 'pszenne', 'pszeniczne', 'pszenną', 'pszennej', 'żyto', 'żyta', 'żytni', 'żytnie', 'żytnia', 'żytniej', 'żytnim', 'pszenno-żytni', 'pszenno-żytnia', 'pszenno-żytnie', 'pszenno-żytnią', 'pszenno-żytniej', 'pszenno-żytni', 'jęczmień', 'jęczmieniem', 'jęczmienia', 'jęczmienny', 'jęczmienna', 'jęczmienne', 'jęczmienną', 'jęczmiennym', 'jęczmienniej', 'owies', 'owsem', 'owsa', 'owsiane', 'owsiany', 'owsiana', 'owsianą', 'owsianym', 'owsianej', 'orkisz', 'orkiszem', 'orkisza', 'orkiszowe', 'orkiszowy', 'orkiszowe', 'orkiszowym', 'orkiszową', 'orkiszowej', 'jaja', 'jajka', 'jajo', 'jajecznica', 'jajeczny', 'jajeczna', ' jajkiem', 'jajko', 'jajem', 'jajecznym', 'jajeczne', 'jajami', 'jajkami', 'jajecznej', 'ryby', 'ryb', 'rybne', 'rybny', 'rybnej', 'rybnymi', 'rybną', 'rybnym', 'dorsz', 'dorsza', 'dorszem', 'dorszowe', 'łosoś', 'łososiem', 'łososia', 'łososiowe', 'łososiowy', 'mintaj', 'mintajem', 'mintaja', 'makrela', 'makrelą', 'makreli', 'miruna', 'miruną', 'miruny', 'pstrąg', 'pstrągiem', 'pstrąga', 'sola',  'śledź', 'śledziem', 'śledzi', 'śledziami', 'śledziowa', 'śledziowe',  'sardynki', 'sardynka', 'sardynek', 'sardynkami', 'halibut', 'halibuta', 'halibutem', 'szczupak', 'szczupakiem', 'szczupaka', 'sandacz', 'sandaczem', 'sandacza', 'tuńczyk', 'tuńczyka', 'tuńczykiem', 'tuńczykowe', 'kargulena', 'karguleną', 'karguleny',  'okoń', 'okonia', 'okoniem', 'karp', 'karpiem', 'karpia', 'leszcz', 'leszcza', 'leszczem', 'karaś', 'karasia', 'krewetki', 'krewetkami', 'krewetkowy', 'krewetkowa', 'krewetkowe', 'krewetek' , 'krewetkowymi',  'kalmary', 'kalmarami', 'kalmarów', 'kalmarowe', 'kalmarowa', 'kalmary', 'ślimaki', 'ślimakami', 'ślimaków', 'orzeszki', 'orzechy', 'orzech', 'orzechowy', 'orzechowe', 'orzechowa', 'orzechami', 'orzechową', 'orzechowych', 'orzechowym', 'orzechem', 'migdały', 'migdałami', 'migdał', 'migdałowe', 'migdałowy', 'migdałowa', 'migdałowym', 'migdałową', 'nerkowce', 'nerkowca', 'pistacje', 'pistacjami', 'pistacji', 'pistacjowe', 'pistacjowym', 'pistacjową',  'płatki migdałowe', 'płatkami migdałowymi', 'płatków migdałowych', 'pekan', 'makadamia', 'seler', 'selerem', 'selerowy', 'selera', 'selerowa', 'selerowej', 'selerową', 'selerowych', 'gorczyca', 'gorczycą', 'gorczycy', 'gorczycę', 'gorczycowy', 'sezam', 'sezamowe', 'sezamu', 'sezamem', 'sezamki', 'sezamowy', 'sezamowa', 'sezamek', 'sezamową', 'sezamych', 'soja', 'sojowe', 'sojowa', 'sojowy', 'soją', 'soi', 'sojowego', 'sojowej', 'sojowych', 'sojową', 'mleko', 'mleczy', 'mleczna', 'mleczne', 'mleka', 'mlekiem', 'mlecznego', 'mlecznej', 'mleczną', 'łubin', 'łubinowy', 'łubinem', 'łubinu'];
    $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('Grillowana pierś z kurczaka, kasza jęczmienna, surówka z czerwonej kapusty z rodzynkami. pszenica 2');

В результате в этом коде у меня есть:

Grillowana pierś z kurczaka, kasza jęczmienna, surówka z czerwonej kapusty z rodzynkami. <b>pszenica</b> 2

Правильный результат:

Grillowana pierś z kurczaka, kasza <b>jęczmienna</b>, surówka z czerwonej kapusty z rodzynkami. <b>pszenica</b> 2

Проблема с "jęczmienna". Эта строка не добавляет ... из функции.

Как ее починить?

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Когда вы взрываете свою строку ввода, искомое слово содержит запятую , в конце: jęczmienna,. Это, конечно, не будет работать должным образом, потому что вы сравниваете jęczmienna с jęczmienna,.

. Что вы можете сделать, это обрезать слова, которые у вас есть, удалив все не алфавитные c символы

$word = preg_replace('/[^\w]/uis', '', $word);
0 голосов
/ 13 февраля 2020

Просто добавьте что-нибудь, чтобы удалить запятые из входной строки, прежде чем разбивать ее на пробелы, чтобы не сравнивать jęczmienna с jęczmienna,.

$value = str_replace(',', '', $value);
$words = explode(' ', $value); // create an array of words
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...