Aloha!
Ich möchte ein Array nach 'Nachname', 'Vorname' sortieren:
$entry["lastname"][0] = "Müller";
$entry["firstname"][0] = "Günther";
natcasesort ($entry["firstname"]);
natcasesort ($entry["lastname"]);
while (list($key) = each($entry["lastname"]))
Kann mir da jemand einen Tipp geben?
Du hast einen groben Denkfehler drin.
Du legst im Prinzip zwei vollkommen voneinander unabhängige Arrays an:
$entry['firstname'] und $entry['lastname'].
Genausogut kannst du sie auch $firstname und $lastname nennen.
Dann sortierst du diese beiden Arrays intern mit natcasesort().
Und dann gibst du das nach Nachnamen sortierte Array aus. Dieses Array hat aber absolut noch niemals davon gehört, dass es beim Sortieren auch Vornamen zu beachten hat, die im anderen Array drinstecken.
Lösung: Du musst dir deine eigene Sortier-Routine schreiben.
Dabei wirst du auch auf folgendes Problem stoßen: Deine Daten sind derzeit falsch herum in den Arrays. Du solltest mit $entry[indexnummer]['feldbezeichnung'] auf die Einträge zugreifen, nicht umgekehrt mit $entry['feldbezeichnung'][indexnummer]. Denn beim Sortieren willst du ja, dass alle Namensbestandteile des ersten, zweiten, dritten... Datensatzes zusammen bleiben. Das ist bei deiner Sortierung aber nur mit Glück der Fall.
Schau dir einfach die Funktion uasort() genauer an. Diese musst du verwenden, um das Array zu sortieren. Dabei musst du eine eigene Sortierfunktion schreiben, die entsprechend prüft, welche Namenskombination aus Vorname und Nachname denn nun nach vorne gehört, und welche nach hinten.
Funktionsvorschlag:
function namesort ($a, $b)
{
$result = strnatcasecom($a['lastname'],$b['lastname');
if ($result == 0) // Gleiche Nachnamen
{
$result = strnatcasecmp($a['firstname'],$b['firstname']);
} //Dann nach Vornamen sortieren
return $result;
}
uasort($entry,"namesort");
- Sven Rautenberg