2010-02-10 5 views
4

dogdogdogdogsdogdogdogssavoir combien de fois un mot revient

comment pourrais-je compter combien de fois « chien » et « chiens » est apparu sans regex?

+1

vous souciez-vous des limites? par exemple "Ceci est une thèse", donc pour le mot "est", le résultat que vous voulez est 3 exact? – ghostdog74

+0

En regardant sa chaîne, il ne le fait pas. Mais bon point @ghostdog, j'ai élargi ma réponse en prenant en compte ce que tu dis. –

Répondre

10

utilisation substr_count()

substr_count() renvoie le nombre de fois où la chaîne de l'aiguille se produit dans la chaîne de meule de foin. Veuillez noter que l'aiguille est sensible à la casse.

Cependant, vous dites que vous voulez compter les occurrences de dogetdogs. Si vous vérifiez dogs d'abord, puis pour dog, vous obtiendrez des résultats faussés (parce que dogs est compté deux fois).

Si votre exemple est littéralement dog et dogs, vous devez soustraire le compte pour dogs de celui pour dog pour obtenir le nombre approprié.

Si vous travaillez sur une approche programmatique avec des mots variables, vous devrez vérifier au préalable si l'un des mots fait partie d'un autre mot.

Bravo à SilentGhost pour une approche plus simple.

+0

ne pouvez-vous pas simplement soustraire le compte du mot long du compte du mot court? pourquoi toutes ces complications? – SilentGhost

+0

@SilentGhost bien sûr. Merci, édité ma réponse. –

+0

@SilentGhost: Il peut devenir plus difficile à comprendre si nous avons affaire à plusieurs chaînes qui se chevauchent. –

0

substr_count

substr_count('dogdogdogdogsdogdogdogs', 'dog'); 
// returns 7 
1

La fonction substr_count doit faire exactement ce que vous demandez:

$str = 'dogdogdogdogsdogdogdogs'; 
$a = substr_count($str, 'dog'); 
var_dump($a); 

Est-ce que vous obtenez:

int 7 


page en citant la documentation:

int substr_count (string $haystack , string $needle 
    [, int $offset = 0 [, int $length ]]) 

substr_count() renvoie le nombre de fois la sous-chaîne aiguille se produit dans la chaîne de botte de foin. Veuillez noter que l'aiguille est sensible à la casse.

0

Eh bien, en plus substr_count() vous pouvez également utiliser le bon vieux str_replace():

$string = 'dogdogdogdogsdogdogdogs'; 

$str = str_replace('dogs', '', $string, $count); 
echo 'Found ' . $count . ' time(s) "dogs" in ' . $string; 

$str = str_replace('dog', '', $str, $count); 
echo 'Found ' . $count . ' time(s) "dog" in ' . $string; 

Cette approche permet de résoudre the problem Pekka mentioned in his answer. Comme un avantage supplémentaire, vous pouvez également utiliser str_ireplace() pour la recherche insensible à la casse, quelque chose que substr_count() n'est pas capable de.

dans le manuel de PHP:

substr_count() renvoie le nombre de fois la aiguille sous-chaîne se produit dans la botte de foin chaîne. Veuillez noter que aiguille est sensible à la casse.

Questions connexes