<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Lister des prénoms sur deux colonnes</title>
<style type="text/css">
/* <![CDATA[ */
td {
width: 120px;
vertical-align: top;
border: 1px solid #000;
}
/* ]]> */
</style>
</head>
<body>
<?php
/* La liste des prénoms */
$prenoms = array("Alphonse", "Anatole", "Benoît", "Benjamin", "Bernard", "Damien", "Etienne", "Eusèbe", "François", "Frédéric");
/* On compte les prénoms */
$nb = count($prenoms);
/* On crée un point de repère vide au départ */
$lettre = "";
/* Création d'un repère pour savoir si on est dans la première ou la seconde colonne */
$col = 0;
?>
<table summary="">
<tr>
<td>
<?php
/* On boucle sur la liste des prénoms */
for($i = 0; $i < $nb; $i++)
{
/* Récupération de la première lettre du prénom en cours */
$prem_lettre = substr($prenoms[$i], 0, 1);
/* Si la première lettre est différente du pointeur : */
if($lettre != $prem_lettre)
{
/* Si on change de lettre, on change de colonne sauf pour le tout premier prénom */
$col = ($col == 2 || $col == 0) ? 1 : 2;
if($i != 0)
{
?>
</td>
<?php
}
/* Si on passe dans la colonne 1, on change de ligne sauf pour le tout premier prénom */
if($col == 1 && $i != 0)
{
?>
</tr>
<tr>
<?php
}
/* À l'exception du premier prénom, on ouvre la colonne suivante */
if($i != 0)
{
?>
<td>
<?php
}
/* On affiche la ligne indiquant la lettre */
echo(" <strong>Lettre ". $prem_lettre ."</strong><br />\n");
/* On assigne la valeur de cette première lettre au point de repère */
$lettre = $prem_lettre;
}
/* On affiche le prénom */
echo(" ". $prenoms[$i] ."<br />\n");
}
/* Si la dernière colonne avec des prénoms est la colonne 1, on complète le tableau avec une cellule vide */
if($col == 1)
{
?>
</td>
<td>
<?php
}
?>
</td>
</tr>
</table>
</body>
</html>
<?php
// On suppose que les accès à la base et la requête sont faits
/*
* Nombre de colonnes par ligne.
*
* Si on désire un autre nombre de colonnes dans la ligne
* Il suffit de modifier la valeur de cette variable
* sans toucher au reste du code
*/
$nbCols = 2;
// Lettres au départ. On considère que minimum un prénom
$lettres = 1;
// Permet de sortir du traitement le premier prénom
$i = 0;
$derniereInitiale = ''; // Première intiale = chaîne vide
// construction du tableau
echo '<table><tr><td valign = "top">';
// Boucle sur les enregistrements trouvés
while($row = mysql_fetch_assoc($result)){
// Récupération de l'initial du prénom en cours
$initialeActuelle = substr($row['prenom'], 0, 1);
// Si changement d'initiale
if($initialeActuelle != $derniereInitiale){
//Si Pas le premier pénom
if($i != 0){
if($lettres % $nbCols){// Si on doit changer de ligne
echo '</td></tr><tr><td valign = "top">';
}
else { // On doit changer de colonne
echo '</td><td valign = "top">';
}
}
// Mémorisation de la nouvelle initiale
$derniereInitiale = $initialeActuelle;
// Affichage de la première
echo '<b>LETTRE ' . $derniereInitiale . '</b><br />';
}
// C'est plus le premier prénom
$i = 1;
Affichage du prénom
echo $row['prenom'] . '<br />';
}
// Fermeture de la table
echo '</td></tr></table>';
?>
M'sieu Albat,
$nbCols = 3;
Je vais tester le script, mais il devrait fonctionner.
Code : Tout sélectionner
mysql> SELECT * FROM prenoms ORDER BY prenom;
+-----------+
| prenom |
+-----------+
| Alphonse |
| Anatole |
| Bernard |
| Damien |
| Emanuelle |
| Eric |
| Etienne |
| Fabien |
| Francis |
+-----------+
9 rows in set (0.00 sec)<?php
// Connexion à la base et extraction des données
$cnx = mysql_connect('localhost', '****', '****') or die ('ERR_CNX <br />' . mysql_error());
mysql_select_db('test', $cnx) or die('ERR_CHOIX_DB <br />' . mysql_error());
$qrySel = 'SELECT * FROM prenoms ORDER BY prenom';
$result = mysql_query($qrySel) or die('ERR_SQL : ' . $qrySel . '<br />' . mysql_error());
/*
* Nombre de colonnes par ligne.
*
* Si on désire un autre nombre de colonnes dans la ligne
* Il suffit de modifier la valeur de cette variable
* sans toucher au reste du code
*/
$nbCols = 2;
// Lettres au départ. On considère que minimum un prénom
$lettres = 1;
// Permet de sortir du traitement le premier prénom
$i = 0;
$derniereInitiale = ''; // Première intiale = chaîne vide
// construction du tableau
echo '<table><tr><td valign = "top">';
// Boucle sur les enregistrements trouvés
while($row = mysql_fetch_assoc($result)){
// Récupération de l'initial du prénom en cours
$initialeActuelle = substr($row['prenom'], 0, 1);
// Si changement d'initiale
if($initialeActuelle != $derniereInitiale){
//Si Pas le premier pénom
$lettres++;
if($i != 0){
if($lettres % $nbCols == 0){// Si on doit changer de ligne
echo '</td></tr><tr><td valign = "top">';
}
else { // On doit changer de colonne
echo '</td><td valign = "top">';
}
}
// Mémorisation de la nouvelle initiale
$derniereInitiale = $initialeActuelle;
// Affichage de la première
echo '<b>LETTRE ' . $derniereInitiale . '</b><br />';
}
// C'est plus le premier prénom
$i = 1;
//Affichage du prénom
echo $row['prenom'] . '<br />';
}
// Fermeture de la table
echo '</td></tr></table>';
?>
Et le résultat sur navigateur clique ici (Je n'arrive pas à garder les colonnes dans le post)