| 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: 15 let
|
|||
0