Guest Odesláno: 11. Březen, 2011 Share Odesláno: 11. Březen, 2011 Jelikož jsem na svém webu potřeboval zjistit, kolikrát se určité slovo v řetězci vyskytuje a nenašel jsem na to funkci (možná exisuje), tak jsem si vytvořil vlastní. Jak to funguje: Zjístíme počet znaků v řetězci, poté ke každému slovu, které chceme spočítat přidáme jeden znak (třeba písmeno 'a'). Tímto způsobem se nám řetězec prodlouží o tolik znaků, kolik je tam hledaných slov, poté to od sebe odečteme a máme výsledek Příklad: 'ahoj ahoj nazdar' počet znaků (včetně mezer): 16 Přidáme k ahoj jeden znak: 'ahoja ahoja nazdar' počet znaků (včetně mezer): 18 18-16=2 => 2x se zde nachází slovo ahoj Zde je kód: function word($var, $word){ $var1 = strlen($var); $var2 = str_replace($word, $word."a", $var); $var2 = strlen($var2); $kolik = $var2 - $var1; return $kolik; } Rozbor kódu: $var1 = strlen($var); Do proměnné $var1 se uloží počet znaků v řetězci $var2 = str_replace($word, $word."a", $var); Do proměnné $var2 uložíme upravený řetězec tak, že ke každému hledanému slovu to připíše písmeno a $var2 = strlen($var2); Zjistíme délku upraveného řetězce $kolik = $var2 - $var1; Odečteme hodotu $var1 od proměnné $var2 a uložíme ji do proměnné $kolik return $kolik; Script vrátí hodnotu promměnné $kolik Použití: word(retezec, slovo); Příklad: echo word("ahoj ahoj nazdar", "ahoj"); Link to comment Share on other sites More sharing options...
Toma- 1 Odesláno: 11. Březen, 2011 Share Odesláno: 11. Březen, 2011 Zauijmave Ja sa tomu nejako moc nerozumiem ale vidim ze logiku to ma Pekne :thumbup: Link to comment Share on other sites More sharing options...
tbx 7 Odesláno: 11. Březen, 2011 Share Odesláno: 11. Březen, 2011 A co třeba function words($look_for, $string) { $str = explode(' ', $string); $found = 0; foreach($str as $word) { if($word == $look_for) { $found ++; } } return $found; } Link to comment Share on other sites More sharing options...
Guest Odesláno: 12. Březen, 2011 Share Odesláno: 12. Březen, 2011 A co třeba function words($look_for, $string) { $str = explode(' ', $string); $found = 0; foreach($str as $word) { if($word == $look_for) { $found ++; } } return $found; } Já jsem v kódu využil funkce, které (alespoň trochu) umím. Chápu to dobře, že funkce explode rozdělí řetězec podle určitého předpisu (zde mezera) a pak cyklem prolézá všemi slovy a kontroluje, zda se shoduje? Díky, že jsem se něco nového naučil Link to comment Share on other sites More sharing options...
tbx 7 Odesláno: 12. Březen, 2011 Share Odesláno: 12. Březen, 2011 No, funkce explode zařadí string do Arraye takže z "Ahoj, jak se máš?" to udělá Array( "Ahoj,", "jak", "se", "máš?"); a funkce foreach to pak projde Link to comment Share on other sites More sharing options...
Guest Frodo Odesláno: 26. Březen, 2011 Share Odesláno: 26. Březen, 2011 Děkuji za funkci, potřeboval jsem to Link to comment Share on other sites More sharing options...
Mikeses 0 Odesláno: 26. Březen, 2011 Share Odesláno: 26. Březen, 2011 $text = 'toto je text'; echo substr_count($text, 'toto'); // vratí 1 ale echo substr_count($text, 'to'); // vrati 2 EDIT #1? samozrejme pokud chcete pocitat slova a né cast slova tak staci substr_count($text, ' to '); Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now