Vorhandenes PHP-Script (Alphabetische Sortierung) erweitern

Shen84

Grünschnabel
Hallo,
ich habe mir ein fertiges PHP-Script gesucht, das Daten aus meiner DB ausließt, sie alphabetisch gruppiert und unter dem jeweiligen Buchstaben ausgibt. Nun möchte dieses Script an meine Bedürfnisse anpassen.

Hier das Script, wie es zur Zeit läuft:

PHP:
/
// array_combine läuft nur mit 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 id, marke, produkt, datum FROM tabelle ORDER BY marke ASC';
$res = mysql_query($sql) or die(mysql_error()); 

// Schlüssel zwischen A-Z erstellen 
$keys = range('A', 'Z'); 
// Raute für unbekannte Zeichen
$keys[] = '#';  

// 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 sind 
//und deren Werte leere Arrays sind 
$data = array_combine($keys, $values); 

while ($line = mysql_fetch_assoc($res)) { 
    // Anfangsbuchstaben ermitteln 
    $initial = getInitial($line['marke']); 
    // und den $data Array dahingehend füllen 
    $data[$initial][] = $line; 
} 
// Den Array durchlaufen 
foreach ($data as $initial => $group) { 
    // Den Anfangsbuchstaben ausgeben 
$inhalt .= sprintf('<br />-= %s =-<br />', $initial); 
    for ($i = 0, $x = count($group); $i < $x; ++$i) { 
        // Und natürlich noch die aus der Datenbank zugeordneten Gruppen
$inhalt .= sprintf("%u: %s <br />", $i + 1, implode(' - ', $group[$i])); 



    } 
} 
// Fertig

In diesem Script werden die Werte id, marke, produkt, datum am Ende unformatiert in einem String ausgegeben
Beispiel:
Code:
-= R =-
1: 113 - Radeberger - Pilsner - 1126027502

Ich möchte gern, dass die Werte aus den Spalten id, marke, produkt, datum am Ende einzeln zur Verfügung stehen, weiß aber nicht wo ich in diesem Script ansetzen muss, um das zu erreichen :(

Hat jemand von euch eine Idee?
 
hi,


bin es jetzt nicht ausführlich durchgegangen. Aber wenn ich mich nicht täusche, stehen die Informationen in $group.

PHP:
//letzet Zeile:
$inhalt .= sprintf("%u: %s <br />", $i + 1, implode(' - ', $group[$i]));  


$group[0]  //-> ID

$group[1]  //-> Marke

$group[2] //-> Produkt

//usw
 
PHP:
//letzet Zeile:
$inhalt .= sprintf("%u: %s <br />", $i + 1, implode(' - ', $group[$i]));  


$group[0]  //-> ID

$group[1]  //-> Marke

$group[2] //-> Produkt

//usw

Ja, das stimmt. Danke für die schnelle Antwort :)

Aber wie begrenze ich jetzt die Ausgabe auf z.B. nur die Marke?

PHP:
$inhalt .= sprintf("%u: %s <br />", $i + 1, implode(' - ', $group[1][$i]));
funktioniert so nicht.
 
Ah, ich habs selbst hinbekommen.
Die Lösung ist
PHP:
$inhalt .= sprintf("%u: %s <br />", $i + 1, implode(' - ', $group[$i][id]));
um z.B. nur die ID auszugeben.
 
Zurück