Regroupemment par Chiffres et lettres

Eléphant du PHP | 183 Messages

10 déc. 2008, 19:34

Bonjour,

J'utilise une fonction qui me permet de regrouper les enregistrements par la première lettre des enregistrement

Exemple

A
Antoine
Alexis

B
Brice

C
Carol
Christian
Cecile
etc ....


Cependant j'ai aussi des enregistrement qui commence par des chiffres est t'il possible de faire un regroupement pour tous les enregistrements commençant par les chiffres de 0 a 9 ?

Voici la requête
<?php
$sql = "SELECT id,nom FROM test ORDER BY nom ASC";
$req = mysql_query($sql)or die(mysql_error());
$prems_lettre='1';

while ($res = mysql_fetch_assoc($req))
{
    if(strtolower($res['nom'][0])!= $prems_lettre)
    {
        echo '<span id="'.$res['nom'][0].'"><br />- ',strtoupper($res['nom'][0]),' -</span><br /><br />';
        $prems_lettre = strtolower($res['nom'][0]);
    }
    
    $nom = $res[nom];
    $id_annonceur = $res[id];
    echo "<li><a href=\"$nom\">$res[nom]</a></li><br />";


}
?>
</ul><div>
<?php
} 
Ce qui donnerai

[0 - 9]
12
78 <<< résultat de la modif que je n'arrive pas a faire
49

A
Antoine
Alexis

B
Brice

C
Carol
Christian
Cecile
etc ....




Merci de votre aide.
_________
Fabien

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 déc. 2008, 14:15

Au lieu d'utiliser $res['nom'][0] pour récupérer le premier caractère de la chaîne il vaut mieux utiliser la fonction substr($res['nom'], 0, 1) ce qui va fonctionner aussi avec les numériques.

Tu peux aussi différencier entre les numériques et les alphabétiques par un test if is_numeric()
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 422 Messages

13 déc. 2008, 19:23

Il suffit juste d'un peu adapter ton algorithme.
Pour l'instant, tu stockes l'initiale et tu compares avec la dernière initiale stockée.
Il faut que tu introduises un 2e cas : celui où l'initiale est entre 0 et 9.
Mais au lieu de stocker l'initiale, stockes un code (par exemple 0-9) qui indique que l'initiale est un chiffre

Autre point, crées une variable initiale : ça t'évitera de la recalculer à chaque fois (et en plus ça te permettra de stocker la pseudo-initiale pour les chiffres)