Raccourcir une chaine avec un séparateur au milieu

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 455 fois - Téléchargée 28 fois

Contenu du snippet

Vous avec une chaine de ce type :

J'aime le PHP et j'espère que ma modeste source vous plaira

Le passage vers la fonction donne :

J'aime le PHP et...vous plaira

Source / Exemple :


function shortenStr($str, $max, $sep = '.', $width = 3)
{
	$nb = strlen($str); // Nombre de caractères
	
	if ($nb > $max)
	{		
		$p = $nb - $max + $width; // Nombre de caractères en trop
		
		if ($max < $width) // Dans le cas où la largeur max est inférieur à la largeur du séparateur
		{
			$width = $max;
		}
		
		$start = ceil($nb / 2 - $p / 2);
		
		return substr($str, 0, $start) . str_repeat($sep, $width) . substr($str, floor($start + $p));
		//       début de la chaine        séparateur du milieu            fin de la chaine
	}
	return $str;
}

$chaine = 'J\'aime le PHP et j\'espère que ma modeste source vous plaira';

echo shortenStr($chaine, 30);

// J'aime le PHP et...vous plaira

Conclusion :


Vos remarques et critiques sont les bienvenus !

A voir également

Ajouter un commentaire Commentaires
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
26 oct. 2005 à 09:37
perso, je ferai ca par une expression regulière :

shortenString($string, $max,$rempl){
$len = strlen($string);
if ( $len > $max ){
return preg_replace('#(.{15})(.*)(.{10})#','$1'.$rempl.'$2',$str);
}
}

a tester, perso je trouve ca plus simple et plus propre
ttestt123123 Messages postés 3 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 26 octobre 2005
26 oct. 2005 à 08:34
Euhhh, tu te prends pas un peu la tête pour rien là ?
Ca serait pas plus simple de tester si la chaine n'est pas déjà aussi longue que max, et sinon :

1- déterminer le nombre de caractères à droite/gauche (nb)
2- chaine de retour = substr du début (nb) + séparateur + substr de fin (nb)

avec séparateur en dur, ne connaissant eprsonnellement pas d'autre caractère connu pour signifier "etc" dans une phrase, à part peut-être "[...]"

Ton code est beaucoup trop long pour si peu
cs_MATHIS49 Messages postés 368 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 14 mai 2010 1
25 oct. 2005 à 23:32
sympa ;) j'aime bien ces petits bouts de code bien utiles ;) 7/10
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
25 oct. 2005 à 23:19
Pas mal du tout :)

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.