Autor Zpráva
Pavlínka
Profil
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 *
Pavlínka:
Pole je správně, projdi ho cyklem a ve stringu hledej pomocí stripos.
juriad
Profil
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
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 *
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0