[PHP] Limiteur de caractere

Bonjour, :hello:

j’ai crée un script qui va recupere le texte dans un fichier txt et qui ensuite filtre le text en rapport le nombre de caractere. Dès que le nombre de caractere est depaser, il fait un saut à la ligne (wordwrap()) et ne coupe pas les mots en plein milieu.

J’ai besoin d’aide pour que à chaque fois que sa saute à la ligne, sa change le nombre de caractere limite.

Exemple :

Fichier txt :

La moitié des volontaires ayant reçu deux doses maximales du vaccin, à 28 jours d’intervalle, ont produit des niveaux d’anticorps qui, selon les résultats définitifs de cet essai clinique, seraient suffisants pour neutraliser le virus.

Script :

Nb limite = 10 : La moitié
Nb limite = 14 : des volontaire
Nb limite = 16 : ayant reçu deux
Nb limite = 18 : doses maximales du
Nb limite = 22 : …

Code :

<?php
$max1 = 10;
$fp = fopen("TestCommentaire.txt","r"); //Ouvre le fichier .txt
while(!feof($fp))
{
$ligne = fgets($fp);
$tableau = explode("\n",$text);
for ($i=0; $i < count($tableau);$i++)
{
$selLigne = $tableau[$i]; // Selectionne un mots
echo "$selLigne";
}
}
fclose($fp); // Fermeture du fichier
?>

Merci d’avance. :smiley:


// mise du texte sur une seule ligne
$text="";
$fp = fopen("TestCommentaire.txt","r"); //Ouvre le fichier .txt
while(!feof($fp)){
 $line=fgets($fp);
 $text.=$line;
}
fclose($fp); 

$min=5;
$line="";

while($i<$c){
  $line.=$tableau[$i]." ";
  $sll=strlen($line)-1;
  if($sll<=$min){
    $i++;
    if($i==$c) {
      substr($line,0,-1);
      echo $line;
    }
  } else {
    $line=substr($line,0,-1);

    echo $line.BR;
    $min=strlen($line);
    $line="";
    $i++;
  }
}

?>

wala, si je me suis pas gourré dans le copier coller ça doit être ça
perso j’ai pas géré avec un fichier, j’ai mis direct ta super phrase dans la variable $text
++

ps: je vais tout de même faire un résumé de mon code : il n’y a plus de max, mais un min qui part de 5 ici
tant que la ligne courante est plus courte que la précédante, on lui ajoute des mots
alors forcément, l’augmentation n’est aps linéaire, et ça se vois bien des fois, mais on pas tout avoir … :non:

on peut fortement simplifier blackwizard74 :


define('BR',"\n<br>");
$max = 20;
$lines='';
$line = '';

$text = file_get_contents('TestCommentaire.txt');
$tableau = explode(' ',$text);

foreach($tableau as $mot) {
	
 $len = strlen($line.' '.$mot);
 
 if($len <= $max){
  $line .= $mot.' ';
 } else {
   $lines .= BR.$line;
   $line = $mot.' ';
 }
}
$lines.$line;

echo $lines;

sauf que toi tu as simplifier le problème de départ donc forcément (sauf si j’ai pas compris …)
ton code transforme un test en une colonne sans dépasser 20 caractères (sauf pour les mots de plus de 20 caractères)
de ce que j’ai compri, il s’agissait d’augmenter la longueur de la ligne à chaque ligne
sur l’exemple donné ça donne un truc comme ça :

-> même si on dirait que l’avant avant dernière ligne est plus courte que la précédant, ce n’est pas le cas, c’est juste du à l’affichage : tous les caractères ne prennent pas le même nombre de pixel

au passage : tiens mon define est passé à l’as
et merci pour file_get_contents(), je connaissais pas (bon >= PHP 4.3)