Jump to content

návod Zjištění počtu určitého slova v řetězci


Guest Punkevník

Recommended Posts

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

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

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 :v:

Link to comment
Share on other sites

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

  • 2 weeks later...

$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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...