Jump to content
Sign in to follow this  
Hyogapag

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

Recommended Posts

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.

Share this post


Link to post
Share on other sites

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;
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...