Anfangsbuchstabe bei einer A-Z Liste

DenisCGN

Mitglied
Nabend,

mal wieder ich. Ich habe eine Künstlerliste. Diese liste ich von A-Z auf. Nun möchte ich, das vor jedem neuen Buchstaben ein A B oder C steht.

A
Adam Grenn
Adam Ant

B
Bon Jovi
Bela B

C
Crystal Mind

D

E

usw.

Ich möchte nicht für jeden Buchstaben eine eigene Abfrage machen.
Geht das nicht einfacher?

Grüße
Denis
 
Du könntest dir eine Funktion schreiben, die dir den Anfangsbuchstaben ausgibt und dann die dazugehörigen Namen aus der Liste. Eine "Standard-PHP-Funktion" fällt mir jedenfalls jetzt nich dazu ein.
 
PHP:
<?php
error_reporting(E_ALL);
$names	=	array('Adam','Bernd', 'Bruno', 'Brigitt', 'Caesar','Daniel','Emil','Franz','Günter','Heinz','Igor','Jeremy','Kurt');
$firstLetter	=	'';
foreach($names as $name)
{
	if(empty($firstLetter) || $firstLetter != substr($name, 0, 1))
	{
		$firstLetter = substr($name, 0, 1);
		echo '<b>'.$firstLetter.'</b><br />';
	}
	echo ' '.$name.'<br />';
}
?>
Das Array mit den Namen muss aber vorher sortiert sein, da es sonst nicht den gewünschten Effekt bringt...
 
Dafür gibts ja auch Array-Funktionen(sort()) wenn das Array nicht sortiert ist.
Du könntest auch die Künstlerliste einlesen mit Dateifunktionen und später dann Mau´s Vorshclag umsetzen.
 
Ja danke, ich weiß, dass es [phpf]sort[/phpf] gibt. Aber vielleicht hat er ja n mehrdimensionales Array oder sonstwas ;) Ich wollte ihn nur darauf hinweisen...
 
Hallo zusammen,

das Skript teste ich! Was heißt denn sortiert? Die Daten kommen bereits nach Künstlername sortiert aus der DB.

Oder muss ich dann noch etwas sortieren?

Denis
 
Hallo,

Dann schreib doch die daten aus der DB in ein Array ;), dann kannst du den Code von mAu nutzen.
Besser wäre allerdings, sich den Umweg über ein Array zu sparen und den Algorithmus von mAu beim Durchlaufen des SQL-Ergebnisses anzuwenden. Also etwa so:
PHP:
<?php

$result = mysql_query('...');

while ($row = mysql_fetch_assoc($result)) {
	if (!isset($first_letter) || $first_letter != strtoupper($row['name']{0})) {
		$first_letter = strtoupper($row['name']{0});
		echo '<strong>'.$first_letter.'</strong><br />';
	}
	echo htmlspecialchars($row['name']).'<br />';
}

?>

Grüße,
Matthias
 
Klasse!

Es funktioniert, JUHU! Nur Bei Bands die nicht mit einem Buchstaben anfangen wird es etwas komisch. Kann man das nciht verallgemeinern. Alle Namen die nicht mit einem Buchstaben Anfangen die werden unter # aufgelistet?

Da muss man das glaube ich über reguläre Ausdrücke machen...oder?

Denis
 
Geht bestimmt auch einfacher, aber es erfüllt seinen Zweck ;)
PHP:
<?php
error_reporting(E_ALL);
$names    =    array('#1 Star', '123 Blink', '~Ärzte', 'Adam','Bernd', 'Bruno', 'Brigitt', 'Caesar','Daniel','Emil','Franz','Günter','Heinz','Igor','Jeremy','Kurt');
$firstLetter    =	'';
$firstSymb			=	false;		
foreach($names as $name)
{
    if(empty($firstLetter) || $firstLetter != $name{0})
    {
    	if(preg_match('~[a-zA-Z]~', $name{0}))
    	{
        $firstLetter = $name{0};
        echo '<b>'.$firstLetter.'</b><br />';
      }
      else
      {
      	if($firstSymb !== true)
      	{
					echo '<b>#</b><br />';
					$firstSymb = true;
				}
			}
    }
    echo ' '.$name.'<br />';
}
?>
 
Zurück