Autor | Zpráva | ||
---|---|---|---|
SpotRudloff Profil |
#1 · Zasláno: 31. 10. 2010, 18:33:52
Zdravím, dělám kód, který spočítá počet slov, každé jen jednou.
Mám tento kód: for($i = strlen(trim($clanek)); $i >= 0; $i--) { preg_match("/\s*(\w*)\s*/i", $clanek, $match); if(count($match) > 0) { $slova .= $match[1]."\n"; } } Jak docílit v regulárním výrazu, aby vynechal již nalezené slovo? Pokusil jsem se udělat kopii proměnné, ve které by to hledalo a potom se to z ní smazalo, jenže to nevyšlo. Pokud někdo víte, tak prosím o pomoc! |
||
AM_ Profil |
#2 · Zasláno: 31. 10. 2010, 18:37:55
no nejefektivnější z hlediska rychlosti by bylo procházet text sekvenčně a počítat slova (bez použití regulárních výrazů), jinak to můžeš dělat tak, že preg_match slovo najdeš, preg_replace ho odstraníš a zároveň spočítáš jeho výskyty.
|
||
SpotRudloff Profil |
#3 · Zasláno: 31. 10. 2010, 18:39:51 · Upravil/a: SpotRudloff
Přesně to jsem zkoušel, ale potom to právě našlo jen jedno slovo a konec. Zkusím to ještě jednou.
Text je uložen v heredocu, ale to na tom nic nemění. EDIT: Výsledek opět stejný. |
||
Keeehi Profil |
#4 · Zasláno: 31. 10. 2010, 19:18:05 · Upravil/a: Keeehi
Nevím, jak je to s rychlostí a náročností na paměť, ale mělo by to být funkční řešení.
$slova = explode(" ",$vstup); $unikatni_slova = array_unique($slova); echo "Počet slov: ".count($unikatni_slova); Pokud potřebujete dělit nejenom podle mezer, ale třeba i podle nových řádků, můžete využít preg_split(); |
||
Majkl578 Profil |
#5 · Zasláno: 31. 10. 2010, 19:32:50 · Upravil/a: Majkl578
Pár možností jak na to:
$string = 'foo bar baz foo'; //1. možnost var_dump(count(array_unique(str_word_count($string, 1)))); //2. možnost var_dump(count(array_unique(preg_split('~\s+~', $string)))); //3. možnost preg_match_all('~\S+~', $string, $matches); var_dump(count(array_unique($matches[0]))); |
||
SpotRudloff Profil |
#6 · Zasláno: 31. 10. 2010, 21:13:28
Díky, všechny fungují.
|
||
Časová prodleva: 13 let
|
0