Homepage von Marco Krings

Tipps & Tricks zu PHP

Arrays sortieren mit Umlauten

PHP bietet derzeit keine Sortierfunktion um Werte mit Umlauten zu sortieren. Diese werden in der Sortierreihenfolge ans Ende des Alphabets gesetzt. Diese 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.

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.

function ArraySort($taDaten) {
    $laOriginal = $taDaten;
    if (count($laOriginal) == 0) return $laOriginal;

    $laModified = array();
    $laReturn   = array();

    foreach($laOriginal As $lsKey => $lsValue) {
        $lsEintrag = $lsValue;
        $lsEintrag = str_replace("Ä", "Ae", $lsEintrag);
        $lsEintrag = str_replace("ä", "ae", $lsEintrag);
        $lsEintrag = str_replace("Ö", "Oe", $lsEintrag);
        $lsEintrag = str_replace("ö", "oe", $lsEintrag);
        $lsEintrag = str_replace("Ü", "Ue", $lsEintrag);
        $lsEintrag = str_replace("ü", "ue", $lsEintrag);
        $lsEintrag = str_replace("ß", "ss", $lsEintrag);
        $lsEintrag = str_replace("-", " ", $lsEintrag);
        $laModified[$lsKey] = $lsEintrag;
    }
    natcasesort($laModified);
    foreach($laModified As $lsKey => $lsValue) {
        $laReturn[$lsKey] = $laOriginal[$lsKey];
    }
    return $laReturn;
}

 

 

If-Kurzform

echo expr ? 'true' : 'false';

phpMailer und 1&1

Beim Versenden von E-Mails per SMTP mit phpMailer über 1&1 erhält man die Fehlermeldung "Could not connect to SMTP host". 1&1 hat den Zugriff gesperrt, so dass ein Versenden per SMTP nicht möglich ist.
Statt $mail->IsSMTP(); muss man $mail->IsSendmail(); verwenden, um E-Mails mit dem phpMailer Senden zu können.

Zeichenkette einzeln durchlaufen

for($n = 0; $n < strlen($lsZeichenkette); $n++)
   echo substr($lsZeichenkette, $n, 1)."<br />";

Copyright © Marco Krings 2001-2010, http://www.marcokrings.de