Couper une chaine sans couper les mots et sans dépasser les lignes

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 717 fois - Téléchargée 32 fois

Contenu du snippet

d'accord, je vous l'accorde on a déja vu pas mal de fois ce code sur phpcs...Erreur... on a déja vu pas mal de fois des fonctions qui ressemble à ce bout de code qui font à peu de choses près la même chose mais pas tout à fait...

alros voila mon code coupe une chaine sans couper les mots... sauf que, au contraire de toutes les autres fonctions vues ici, elle s'arrête au dernier caractère espace avant la longueur limite (et non après)...

Source / Exemple :


function cutStr($str)					
	if(strlen($str)>$limite){
		$tStr = split(" ",$str);
		$j=0;
		
		$str1="";
		$str2="";
		$i = strlen($str1+$tStr[$j])+1;
		
		while($i<$limite){
			$str1 = $str1." ".$tStr[$j];
			$j++;
			$i = strlen($str1)+strlen($tStr[$j])+1;
		}
		
		$str2 = substr($str,strlen($str1),strlen($str)-strlen($str1));
	
		echo '<tr>';
		echo trim($str1)."<br>";
		echo trim($str2);
	}
	else{
		echo $str2;
	}
}

Conclusion :


voila bon ça n'a rien d'exceptionnelle...

mais bon ça fait un bout de temps que je fais du php et je n'avais encore jamais poster de source (encore jamais qqch d'inédit...)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
Pourquoi tu ne corriges pas toi même ??
Messages postés
125
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
8 juin 2006

C'est pas grave ^^ mais si j'ai bien compris, ta fonction découpe chaque mot et l'affiche ?
Messages postés
17
Date d'inscription
lundi 16 février 2004
Statut
Membre
Dernière intervention
23 février 2009

Anthomicro :
certe tu peux totalement déformer un site. Encore que avec ma solution tu risque moins de déformer un site que quand la chaine est coupée au premier caractère espace après la limite
mais de toutes façon j'utilise ceci dans le cas d'un générateur de pdf en php
tout dépend donc de l'utilisation que l'on en fait...

fuckya :
dsl pour cette maladresse, je n'est pas ce souci du détail...
mais bon même pour un débutant je pense que l'erreur renvoyer pour ce genre de faute est "expected '{' at row 2"... bon ça va CT pas trop dur à débugger... ;)
mais j'aurais pu faire gaffe quand même...j'avoue...

coockiesch :
$str2 = substr($str,strlen($str1),strlen($str)-strlen($str1));
C vrai que pour cette ligne G un peu abusé quand même...
mais dans la boucle je n'ai pas trop le choix, y'en a un que je peux virer mais pas les deux, sinon ça change le principe de mon algo (ce qui a des fin d'optimisation devrait peut-être être fait... mais bon...)


Kirua :
strlen($str1+$tStr[$j])+1;
exacte il y a un petit pb ici...
je sais que les fonctions sur les chaines sont pour la plupart loude et longues à éxécuter... mais je ne suis pas un fanatique de l'optimisation en temps d'éxécution mais plutot en temps de réflexion...
disons que je suis un féniant koi... ;)

sur ce, bon coding à tous !!
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

"strlen($str1+$tStr[$j])+1;"

je sais pas ce que c'est le +, mais j'imagine que ça fait office de concaténation (ça me paraît bizarre qd même, j'ai peut-être mal compris le code). quoi qu'il en soit, tu ne dois pas faire:

strlen($str1 . $str2)

mais bien:

strlen($str1) + strlen($str2)

parce que dans le premier cas, tu concatènes les chaînes (long et lourd) et ensuite tu en calcules la longueur (ce qui a déjà dû être fait de manière cachée par la concaténation, c'est du gachis). la seconde version au contraire se contente de calculer la longueur des deux chaînes séparément, ce qui est équivalent mais bcp plus rapide.

au passage, t'as pas l'air de t'en rendre compte, mais appeler strlen c'est lourd comme opération (si du moins c'est, comme je le pense, le même procédé qu'en C). faudrait optimiser ça;

ensuite, pour avoir écrit ce genre de code en C++, t'as tout intérêt à parser toi-même le texte, caractère après caractère; c'est plus chiant à écrire comme code, plus long, moins élégant; mais nettement plus rapide parce que tu optimises directement.
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
J'aime pas trop l'idée d'avoir une fonction comme strlen dans une boucle... D'ailleurs, pit être tout simplement trop de strlen...

@++

R@f
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_FreakDev)