Alphabetische Auflistung

Hallo!

Ich hoffe ihr könnt mir helfen. An sich funktioniert es auch so wie ich will, außer bei Zahlen. Und zwar nehme ich einfach den ersten Buchstaben des Wörtes und so erstelle ich eine Liste. Was auch funktioniert, nur darf halt nicht das erste Wort eine Zahl sein da es sonst unschön aussieht (siehe unten). Kann man die Wörter die mit Zahlen anfangen irgendwie gruppieren und die dann unter 0-9 alle gemeinsam anzeigen? Ich hoffe ihr wisst was ich meine, vielleicht kann mir da jemand nachhelfen, irgendwie stehe ich jetzt an.

Momentan sieht das Ergebnis so aus:
0-9
1

0-9
2

A
..
B
..
usw.

Ich würde es aber gerne so haben:

0-9
(Alle Zahlen hier rein also, 1,2, usw.

Und dann wie gehabt A, B aber das geht ja eh.


PHP:
while($row = mysql_fetch_array($result))
{
if (!isset($first_letter) || $first_letter != strtoupper($row['name']{0})) {

$first_letter = strtoupper($row['name']{0});

if($first_letter == '1' OR $first_letter == '2') $first_letter = '0-9';

echo '<strong>'.$first_letter.'</strong><br>';
}
echo '<a href="/dumdidum/'.$row['id_artikel'].'/" title="'.$row['name'].'">'.$row['name'].'</a><br />';
usw...
 
Hi,
ich habe die Abfrage hinzugefügt, ob die Kategorie "0-9" schon mal ausgegeben wurde. Falls ja, wird sie nicht noch mal ausgegeben.

PHP:
while($row = mysql_fetch_array($result))
{
if (!isset($first_letter) || 
   ($first_letter != strtoupper($row['name']{0}) && $first_letter != '0-9' )) {

$first_letter = strtoupper($row['name']{0});

if($first_letter == '1' OR $first_letter == '2') $first_letter = '0-9';

echo '<strong>'.$first_letter.'</strong><br>';
}
echo '<a href="/dumdidum/'.$row['id_artikel'].'/" title="'.$row['name'].'">'.$row['name'].'</a><br />';
//usw... 
}
 
Danke für die Antwort. Jedoch passt es so nicht. Er würde mir dann alles unter 0-9 ausgeben. Sprich die ganzen Anfangsbuchstaben fallen da plötzlich weg. So hatte ich es auch schon probiert nur kam ich da zu keinen Lösung...
Vielleicht hat jemand anderes eine Idee?
 
Hi,

ja das stimmt...
Also die Abfrage lässt sich ja beliebig erweitern, ob das dann die beste Lösung ist, ist eine andere Frage, aber so sollte es doch dann gehen, oder?

PHP:
//...
if (!isset($first_letter) || 
   ($first_letter != strtoupper($row['name']{0}) && 
      ($first_letter != '0-9'  || !preg_match('/^\d/', $row['name']{0})))) {
//...


Code:
If Abfrage:  (  !isset()   || (  changed   && (  !=0-9   || !starts with \d  )  )  )
Bei 1:          true                                                        = TRUE: 0-9 wird ausgegeben
Bei 2:          false            true            false       false          = FALSE: nichts wird ausgegeben
Bei A:          false            true            false       true           = TRUE: A wird ausgegeben
Bei B:          false            true            true        true           = TRUE: B wird ausgegeben

Kommt das hin?

Viele Grüße
 
Zurück