Gunther: Bester Lösungsweg?

Beitrag lesen

Hallo,

vorweg: Ich bin kein ausgewiesener Experte in diesen Dingen, aber hier dennoch ein paar Anregungen meinerseits.

ich habe ein 1D-Array mit IDs.

Wo kommt das (dessen Daten) her?

Die IDs gehören zu Personen, die in einer MySQL-DB hinterlegt sind. Nun möchte ich die Namen und zugehörigen Adressdaten der Personen nach Nachname sortiert ausgeben.

Ich habe schon den ganzen Abend im Netz gestöbert. Mittlerweile scheint die Lösung zu sein, die Daten in ein mehrdimensionales Array zu schreiben und über multisort zu sortieren und auszugeben.

Warum willst du das mit PHP machen, wenn dir MySQL die Arbeit schon bei der Abfrage abnehmen kann? Stichwort: ORDER BY [ASC|DESC]

Jetzt mal eine peinliche Frage wie bekomme ich aus den einzelnen arrays ein mehrdimensionales...

SELECT vorname, nachname, telefon, strasse FROM ...
while ($row = mysql_fetch_array ($result)) {
$vorname = $row ["vorname"];
$nachname = $row ["nachname"];
$telefon = $row ["telefon"];
$strasse = $row ["strasse"];
}

  
// Pseudo-Code  
SELECT id, vorname, nachname, telefon, strasse FROM tab ORDER BY nachname ASC  
while ($row = mysql_fetch_array ($result)) {  
$personen[$id]['vorname'] = $row ["vorname"];  
...  
}  

wobei du idealerweise eigentlich in der DB Tabelle ein entsprechendes ID-Feld (als auto_increment Feld) haben solltest.

In deinem Beispiel haben die Variablen $vorname, $nachname, etc. am Ende der Schleife immer nur die Werte des letzten Eintrags, da sie ja bei jedem Durchgang jeweils überschrieben werden!

Ansonsten kannst du bspw. auch vorher ein neues leeres Array (z.B. $personen) anlegen, und nach jedem Schleifendurchgang die jeweiligen Werte deiner Variablen in dieses Array einfügen.

  
$personen = array();  
...  
while ($row = mysql_fetch_array ($result)) {  
$vorname = $row ["vorname"];  
...  
$personen[] = array("vorname" => $vorname, "nachname" => $nachname, ...);  
}  

Nur müsstest du sinnvollerweise besser deine IDs gleich passend zuordnen, bzw. die von mir o.g. Variante (IDs in der DB Tabelle) verwenden.

Oder gibt es einen anderen eleganten Weg?

Wahrscheinlich. ;-)
Den werden wir beide erfahren, wenn sich hier einer der Experten zu Wort meldet.

Gruß Gunther