PHP-Code:
<?php
mysql_connect('localhost', '***', '***');
mysql_select_db('***');
// array_combine existiert erst seit PHP 5
if (!function_exists('array_combine')) {
function array_combine($keys, $values)
{
// nicht ganz die selbe Funktionalität
$combined = array();
for ($i = 0, $x = min(count($keys), count($values)); $i < $x; ++$i) {
$combined[$keys[$i]] = $values[$i];
}
// aber ausreichend
return $combined;
}
}
// Funktion die uns den Anfangsbuchstaben eines Strings liefert
// mit der Besonderheit Umlaute auf das 26-Buchstaben-Alphabet umzulegen (leider manuell)
function getInitial($string)
{
$initial = $string{0};
if (preg_match('/^[a-z]$/i', $initial)) {
return strtoupper($initial);
}
switch ($initial) {
case 'ä': case 'Ä':
return 'A';
case 'ö': case 'Ö':
return 'O';
case 'ü': case 'Ü':
return 'U';
default:
// Anfangsbuchstabe ein anderes Zeichen? Dann Raute als Default
return '#';
}
}
// Query zur Abfrage
$sql = "SELECT `interpret`, `album`, `trackanzahl` FROM `alben` ORDER BY `interpret` ASC";
$res = mysql_query($sql) or die(mysql_error());
// Schlüssel zwischen A-Z erstellen
$keys = range('A', 'Z');
$keys[] = '#'; // Raute für unbekannte Zeichen
// Die Werte sollen leere Arrays sein
$values = array_fill(0, 27, array());
// Das ganz kombinieren und wir erhalten unsere leere $data-Maske, deren Schlüssel das Alphabet
// und die Raute und deren Werte leere Arrays sind
$data = array_combine($keys, $values);
while ($line = mysql_fetch_assoc($res)) {
// Anfangsbuchstaben ermitteln
$initial = getInitial($line['interpret']);
// und den $data Array dahingehend füllen
$data[$initial][] = $line;
}
// Den Array durchlaufen
foreach ($data as $initial => $group) {
// Den Anfangsbuchstaben ausgeben
printf('<hr />%s
', $initial);
for ($i = 0, $x = count($group); $i < $x; ++$i) {
// Und natürlich noch die aus der Datenbank zugeordneten Gruppen
printf('%u: %s
', $i + 1, implode(', ', $group[$i]));
}
}
// Fertig
?>
Code:
A B C D E F 1: fünfzig cent, get rich or die tryin', 12 G H I J K L M N O 1: öde band, öde lieder, 5 P Q R S 1: scooter, hyper hyper, 1 2: scooter, how much is the fish, 1 T U V W X Y Z # 1: 50 cent, get rich or die tryin', 12
Kommentar