Haz un query que saque todas los registros (si solo quieres los de una categoría, pues no saques el resto). Luego haz 26 (mas una si incluyes la ñ y mas otra si incluyes carácteres especiales como números y demás) arrays (o una matriz de arrays, solución que me gusta más.)
Si haces 26 matrizes tienes que usar nombres de variable dinámicos:
Por tanto si $id_de_matriz vale 1, se referirá a la variable $matriz1
Si no, usa índices
Por tanto si $id_de_matriz vale 1, se referirá al elemento de la matriz 1.
Las matrices pueden contener matrices dentro, ergo, explicaré el método de las matrices:
para crear la supermatriz ($matriz):
Código PHP:
$matriz=array("0-9" => array(),"Ñ"=>array()); //Así se tiene el elemento de los carácteres especiales y el de las Ñ.
//Si no se inicia la matriz $matriz vacía.
for ($i=0;$i<26;$i++){
$matriz[chr(65+$i)]=array(); //Crea con chr(codio ASCII) el índice del sistema.
}
Con esto ya tenemos el sistema casi hecho ahora:
Código PHP:
$result = mysql_query($query,$link);//en $query está la pesquisa a la base de datos y en $link el identificador de enlace.
while($row=mysql_fetch_assoc($result)){//Estraemos elemento a elemento
$identificador = strtoupper(substr(row['nombre'],0,1));//Cogemos el primer carácter
if(preg_match('/([A-ZÑ])/',$identificador) = 0){$identificador="0-9";}
//Con expresiones regulares comprobamos que el identificador sea correcto.
$matriz[$identificador][$row['id']=$row;
//o bien:
//$matriz[$identificador][$row['nombre']=$row;
}
Para mostrar los datos haces un foreach($matriz[$id] as $j) y te saldrán los datos fluidamente.