PHP bietet derzeit keine Sortierfunktion um Werte mit Umlauten zu sortieren. Diese werden in der Sortierreihenfolge an das Ende des Alphabets gesetzt.
Nachfolgende Funktion sortiert ein Array, wie sie in Telefonbüchern verwendet wird (In Anlehnung an die DIN 5007-2). Ebenso wird der Bindestrich dem Leerzeichen gleichgesetzt. Anstatt natcasesort kann auch eine andere Sortierfunktion von PHP genutzt werden, jedoch darf die verwendete Funktion die Schlüssel der Werte nicht verändern.
function ArraySort($tArray) {
$aOriginal = $tArray;
if (count($aOriginal) == 0) { return $aOriginal; }
$aModified = array();
$aReturn = array();
$aSearch = array("Ä","ä","Ö","ö","Ü","ü","ß","-");
$aReplace = array("Ae","ae","Oe","oe","Ue","ue","ss"," ");
foreach($aOriginal as $key => $val) {
$aModified[$key] = str_replace($aSearch, $aReplace, $val);
}
natcasesort($aModified);
foreach($aModified as $key => $val) {
$aReturn[$key] = $aOriginal[$key];
}
return $aReturn;
}
Vom übergebenen Array wird eine Kopie erstellt, jedoch wird der Wert um seine Umlaute und Sonderzeichen beraubt, so dass jedoch eine Zuordnung zum Original über die Schlüssel bestehen bleibt. Anschließend wird das modifizierte Array sortiert, hierbei wird die natürlichsprachige Sortierung verwendet, welche nicht zwischen Groß- und Kleinschreibung unterscheidet. Anhand der neuen sortierten Reihenfolge der Schlüssel, die Werte aus dem Ursprungsarray in ein neues Array geschrieben. Selbiges wird dann von der Funktion zurück gegeben.