Autor | Zpráva | ||
---|---|---|---|
Pavlínka Profil |
#1 · Zasláno: 4. 2. 2022, 11:15:24
Zdarvím,
hledám efektivní vyhledávání v řetězci, kde by se přímo v textu vyhledalo vyjmenované slovo a vrátilo true/false ideálně i s výpisem konkrétního slova... jelikož vyjmenovaných slov je hodně, ráda by jsem využila array... bohužel nemohu najít řešení, které by počítalo s velkým/malým písmem... mohu poprosit o nasměrování? |
||
anonym_ Profil * |
#2 · Zasláno: 4. 2. 2022, 11:25:09
Pavlínka:
Pole je správně, projdi ho cyklem a ve stringu hledej pomocí stripos .
|
||
juriad Profil |
#3 · Zasláno: 4. 2. 2022, 11:30:35
Pokud to je pomalé, existuje algoritmus na hledání mnoha slov najednou: Aho-Corasiková: github.com/wikimedia/AhoCorasick. Pozor na to, že
stripos může být stále rychlejší, protože ta funkce je implementovaná v C oproti nějakému algortimu v PHP.
|
||
Pavlínka Profil |
#4 · Zasláno: 5. 2. 2022, 09:56:12
anonym:
stripos ale řeší pouze jedno hledané slovo v textu ne? chtěla jsem se vyhnout právě tomu, že budu mít pro každé vyjmenované slovo vlastní podmínku... při použití jednoduché funkce mi celkem snadno vypíše array zda slovo existuje a na jaké pozici... nevím ale jak zabránit vypsání prázdného obsahu aby jsem jej nemusela zpracovávat nebo jak udělat podmínku na prázdné hodnoty ... function multineedle_stripos($haystack, $needles, $offset=0) { foreach($needles as $needle) { $found[$needle] = stripos($haystack, $needle, $offset); } return $found; } $haystack = "bramborová fyzika je velice zábavná"; $needle = array("fyzika", "bydlet", "mýt"); print_r(multineedle_stripos($haystack, $needle)); |
||
Stroganov Profil * |
#5 · Zasláno: 5. 2. 2022, 10:01:08
function multineedle_stripos($haystack, $needles, $offset=0) { foreach($needles as $needle) { $word_position = stripos($haystack, $needle, $offset); if ($word_position !== false) { $found[$needle] = $word_position; } } return $found; } |
||
anonym_ Profil * |
#6 · Zasláno: 5. 2. 2022, 10:55:56
Pavlínka:
„stripos ale řeší pouze jedno hledané slovo v textu ne?“ Vyjmenovaná slova se budou procházet jedno po druhém cyklem (jsou v poli), takže v kaaždé iteraci cyklu budeš pracovat s právě jedním slovem. Na konci cyklu budeš mít nalezené výskyty všech slov. |
||
Časová prodleva: 2 roky
|
0