La boucle "for"

Résolu
Bonjour,

Dans mon script, j'ai mis une boucle for qui me liste les noms de ma table.

$select = 'SELECT nom,COUNT(*) AS nb FROM individus WHERE famille LIKE "%TOTO%" GROUP BY nom ORDER BY nom ASC'; 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); 

while ($row = mysql_fetch_array($result))     
{   
         for($i=A;$i<=Z;$i++) 
        {  
         $lettre_nom = substr($row['nom'],0,1); 

     if ($lettre_nom == $i) 
     { 
        echo ''.$row['nom'].' '; 
 } 
         } 
} 


Mais quand la lettre de l'initiale du nom change ($i), je voudrais aller à la ligne.
Comment faire ?
Merci

7 réponses

  1. Contributeur
    Bonjour,
    Est-ce qu'au final, tu as réussi à faire ce que tu voulais ?
    1. Oui, à peu près .............
  2. Là :
    $lettre_nom = substr($row['nom'],0,1);
    
    while ($row = mysql_fetch_array($result)) 
    { 
    echo ''.$row['nom'].' '; 
    $lettre_nom = substr($row['nom'],0,1);
    	if ($lettre_nom != substr($row['nom'],0,1));
    	{ 
    	echo "<BR>"; 
    	$lettre_nom = substr($row['nom'],0,1);
    	} 
    }		
    


    J'ai tous les noms, sans saut de ligne ...........
    1. Ca me semble pas mal, mais j'ai le msg :
      Fatal error: Function name must be a string
      pour if ($lettre_nom != ($substr($row['nom'],0,1)))
      1. Oui, j'ai le même résultat. Mais j'aurais voulu éviter de tester 26 fois la première lettre du nom.
        Mais faire un <br> quand celle-ci change !
        1. $select = 'SELECT nom,COUNT(*) AS nb FROM individus WHERE famille LIKE "%TOTO%" GROUP BY nom ORDER BY nom ASC';
          $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

          $row = mysql_fetch_array($result);
          $lettre_nom = substr($row['nom'],0,1);

          while ($row = mysql_fetch_array($result))
          {
          if($lettre_nom != $substr($row['nom'],0,1))
          {
          echo "<BR>";
          $lettre_nom = substr($row['nom'],0,1);
          }

          echo ''.$row['nom'].' ';
          }
      2. Effectivement, ce serait possible. Mais je suis obligé de répéter 26 fois la même condition. Je voulais l'éviter ..........
        1. Déja je te propose de remplacer ça :

          for($i=A;$i<=Z;$i++)
          {
          $lettre_nom = substr($row['nom'],0,1);

          if ($lettre_nom == $i)
          {
          echo ''.$row['nom'].' ';
          }
          }

          par ça :

          echo ''.$row['nom'].' ';

          au final tu auras le même résultat non ?
      3. A quoi te sert le for et le if ?

        Pourquoi ne pas faire directement : echo ''.$row['nom'].' ';

        Car la en gros si je comprend bien tu fait
        i = A
        tu regarde si ta variable commence par A, si oui tu l'affiche
        i = B
        tu regarde si ta variable commence par B, si oui tu l'affiche
        ...

        1. Merci titus22. Je comprends un peu ce que tu veux dire, mais j'ai du mal à le mettre par écrit.

          Et je vais devoir écrire 26 lignes pour les 26 lettres de l'alphabet !
          Ne peut-on pas l'écrire avec $i et $i++ ?
          1. pour faire un saut de ligne c'est \n
            donc tu as juste a faire un test :)