Compter le nombre de mots dans une chaine de caractères

Skycer666
WRInaute discret
WRInaute discret
 
Messages: 59
Inscription: 5 Mai 2009

Compter le nombre de mots dans une chaine de caractères

Message le Mar Mai 19, 2009 10:15

Bonjour

J'aimerai compter le nombre de mots d'une chaine de caractères :
Pour faire ça, j'utilise la fonction

Code: Tout sélectionner
echo str_word_count($content);


Après ça, en faite, j'aimerai faire autre chose.
Dans une page php, le texte s'affiche sur 2 colonnes enfaite et j'aimerai pouvoir insérer la première moitié de mon texte dans la première colonne et la seconde partie ds la seconde colonne.

Je me suis dit utilise ça :

Code: Tout sélectionner
$res = strlen($content); /* compte le nombre de [b]caractères[/b] de la chaine */
   $content2= substr($content,0,$res/2); /* et je divise par 2 pour avoir la moitié */


Mais le problèem c'est que ça coupe un mot en plein milieux...?!
Comment faire pour couper ma chaine a la fin d'un mot plutot !!

merci de vos idées et de vos solutions

le-bon-plan.com
WRInaute discret
WRInaute discret
 
Messages: 129
Inscription: 1 Juin 2007

Re: Compter le nombre de mots dans une chaine de caractères

Message le Mar Mai 19, 2009 10:26

L'algorithme doit etre le suivant :

Obtenir le nombre de caracteres de ta chaine (ca sera bcp plus rapide à l'execution plutot que de compter le nombre de mot)

Diviser la taille de ta chaine par 2 pour obtenir le caractere centrale de ta chaine.

Parcourir la chaine de caractere à partir de l'index du milieu de chaine et tester des que tu rencontres un caractere d'espacement.

L'index du caractere d'espacement te permettra alors de découper ta chaine correctement.

J'espere avoir ete claire.

Skycer666
WRInaute discret
WRInaute discret
 
Messages: 59
Inscription: 5 Mai 2009

Re: Compter le nombre de mots dans une chaine de caractères

Message le Mar Mai 19, 2009 10:54

Code: Tout sélectionner

$nb_caract=strlen($content);
$nb_caract=$nb_caract/2;

foreach($content as $nb_caract)
{
      $last_space = strrpos($chaine, " ");
}


j'ai essayer de faire une première ebauche mais je vois pas vraiment comment faire ...


anemone-clown
WRInaute passionné
WRInaute passionné
 
Messages: 1276
Inscription: 11 Nov 2007

Re: Compter le nombre de mots dans une chaine de caractères

Message le Mar Mai 19, 2009 11:00

Je suis à peu près d'accord avec le-bon-plan, mais je ferais différemment :

1- déterminer la longueur totale de la chaîne (strlen)
2- couper la chaîne en deux brutalement (substr)
3- selon que tu préférerais le premier morceau de chaîne plus court que le second, tu utilises strrpos (dernier) ou strpos (premier) pour trouver le dernier caractère espace (ou d'autres séparateurs) dans la première partie de la chaîne ou le premier séparateur dans la seconde moitié de la chaîne coupée en deux.
4- ensuite, il suffit de déterminer la position exacte de la césure (faire des plus et moins... attention à l'offset 0 ou 1 parfois) à effectuer dans la chaîne de départ.

Il y a moyen de simplifier en jouant sur les index de départ des strpos... ;)
Dernière édition par anemone-clown le Mar Mai 19, 2009 11:05, édité 1 fois.

Skycer666
WRInaute discret
WRInaute discret
 
Messages: 59
Inscription: 5 Mai 2009

Re: Compter le nombre de mots dans une chaine de caractères

Message le Mar Mai 19, 2009 11:04

Code: Tout sélectionner
// -----------------------------------------
// Coupe une chaine en fonction du nombre de mots.
// -----------------------------------------
function couper($chaine, $lg_max)
{
   //On vérifie si le texte est plus grand que le nombre de caractères spécifiés
   if (strlen($chaine) > $lg_max)
   //Si la réponse est non le script ne fait rien mais si c'est oui on continue...
   {
      $chaine = substr($chaine, 0, $lg_max);
      
      //on cherche l'espace le plus proche du maximum des caractères autorisés   
      $last_space = strrpos($chaine, " ");
      
      //On ajoute ... à la suite de cet espace   
      $chaine = substr($chaine, 0, $last_space);
   }
   
   echo $chaine;
}


Ceci fonctionne pour la première partie de mon texte mais comment je retrouve le mot ou je me suis arreter..


anemone-clown
WRInaute passionné
WRInaute passionné
 
Messages: 1276
Inscription: 11 Nov 2007

Re: Compter le nombre de mots dans une chaine de caractères

Message le Mar Mai 19, 2009 11:08

Tu as deux résultats à obtenir, non? ;) Il faut donc travailler sur 2 sous-chaînes...

Skycer666
WRInaute discret
WRInaute discret
 
Messages: 59
Inscription: 5 Mai 2009

Re: Compter le nombre de mots dans une chaine de caractères

Message le Mar Mai 19, 2009 11:15

Code: Tout sélectionner
function couper2($chaine, $lg_max)
{
   //On vérifie si le texte est plus grand que le nombre de caractères spécifiés
   if (strlen($chaine) > $lg_max)
   //Si la réponse est non le script ne fait rien mais si c'est oui on continue...
   {
      $chaine1 = substr($chaine, 0, $lg_max);
      
      
      //on cherche l'espace le plus proche du maximum des caractères autorisés   
      $last_space = strrpos($chaine1, " ");
      
      //On ajoute ... à la suite de cet espace   
      $chaine1 = substr($chaine1, 0, $last_space);
      $chaine2 = substr($chaine,strlen($chaine1),strlen($chaine));
   }
   
   echo $chaine1;
   echo $chaine2;
}


Voila avec ça sa marche j'ai deux chaines bien couper. merci les Gens


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Suggest

  • Calcul du nombre de backlinks
    Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
  • Analyseur de densité
    Cet outil vous permet de calculer l'indice de densité d'un mot-clé d'une page web. Il est calculé à la fois pour la balise TITLE, la balise META description et l'ensemble du texte de la page.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités