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

WRInaute discret
Bonjour

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

Code:
 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:
$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
 
WRInaute discret
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.
 
WRInaute discret
Code:
$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 ...
 
WRInaute passionné
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... ;)
 
WRInaute discret
Code:
// -----------------------------------------
// 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..
 
WRInaute discret
Code:
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
 
Discussions similaires
Haut