Aller au contenu

Un mélange de explode() et wordwrap()


Sujets conseillés

Posté

Bonjour, quelqu'un connait-il ou a-t-il écrit une fonction permettant de scinder une variable de type string en éléments de tableaux (comme explode) en faisant en sorte que chaque élément ait une longueur déterminée (comme wordwrap)?

En fait, ma variable est un message de forum d'environ 3000 caractères et composé d'une multitude de pseudo-paragraphes délimités par des

<br />

. Je voudrais scinder cette variable en plusieurs morceaux, disons de 600 caractères environ chacun. Seulement, je voudrais que la scission ne puisse se faire qu'à des

<br />

, en considérant ce retour à la ligne comme un séparateur de la fonction explode() (c'est-à-dire que le retour à la ligne en question ne se trouve dans aucun des éléments de tableau de sortie).

Voici un exemple :

function foo($texte, $taille, $separateur) {
jgklfghlgkh;
}
$message="première partie du message<br />deuxième partie du message<br />troisième partie du message";
$message=foo($message, 40, "<br />");
//Et on aurait donc :
$message[0]==="première partie du message<br />deuxième partie du message"; //n'a pas coupé au premier <br /> car le nombre de caractères aurait été insuffisant
$message[1]==="troisième partie du message";

J'espère que ma description est compréhensible. Merci d'avance.

Posté

Qqch dans le genre, à affiner :)

function foo($texte, $taille, $separateur) {
$lensep = strlen($separateur);
$lignes = array();
do {
// si aucun intérêt à chercher un séparateur ou si aucun séparateur trouvé
if( ( strlen($texte) < $taille + $lensep ) || ( ($pos = strpos($texte, $separateur, $taille))===false ) ) {
$lignes[] = $texte; // prend la fin du texte
break;
}
$lignes[] = substr($texte, 0, $pos); // prend jusqu'au séparateur
$texte = substr($texte, $pos + $lensep); // réduit le texte sans le séparateur
} while($texte);
return $lignes;
}

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...