Funktion strcasecmp() - Zwei strings vergleichen

In PHP-Anwendungen müssen häufig zwei Zeichenketten miteinander verglichen werden. Das kann z.B. notwendig sein, wenn die Dateinamenerweiterungen zweier Dateien verglichen werden sollen. Für solche Vorgänge kann man die Funktion strcasecmp() verwenden. Damit werden zwei strings miteinander verglichen, wobei der Vergleich nicht case-sensitive ist. Es wird somit nicht zwischen Groß- und Kleinschreibung unterschieden. Innerhalb der runden Klammern werden die folgenden Parameter angegeben.

  1. Die erste zu vergleichende Zeichenkette (string).
  2. Die zweite zu vergleichende Zeichenkette (string).

Beim folgenden Beispiel werden die Variablen $str1 und $str2 verglichen.

<?php

$str1 = 'Ab';
$str2 = 'aB';

// Ausgabe 0
echo strcasecmp ($str1, $str2);

?>

Rückgabewert von strcasecmp()

Der Rückgabewert von strcasecmp() ist vom Datentyp int. Dabei werden die folgenden Werte zurückgegeben.

  • 0, wenn beide strings identisch sind.
  • <0, wenn der erste string kleiner als der zweite ist.
  • >0, wenn der erste string größer als der zweite ist.

Welcher string kleiner oder größer ist, wird anhand des ASCII-Werts von den ersten Zeichen ermittelt, die nicht identisch sind. Beim folgenden Beispiel ist der Rückgabewert >0, da der ASCII-Wert von d größer als von b ist.

<?php

$str1 = 'Ad';
$str2 = 'Ab';

// Ausgabe 2
echo strcasecmp ($str1, $str2);

?>

Vergleich von Umlauten

Falls die Zeichenketten Umlaute mit Groß- und Kleinschreibung enthalten, kann es passieren, dass sie als nicht identisch betrachtet werden, da Umlaute in Kleinbuchstaben nicht zu den Umlauten in Großbuchstaben zugeordnet werden. Beim folgenden Beispiel ist die Ausgabe 32 und nicht 0, obwohl der string äöü eigentlich identisch wie ÄÖÜ betrachtet werden sollte.

<?php

$str1 = 'äöü';
$str2 = 'ÄÖÜ';

// Ausgabe 32
echo strcasecmp ($str1, $str2);

?>

strings in Kleinbuchstaben umwandeln

Eine mögliche Lösung für das Problem mit den Umlauten kann sein, die strings zum Vergleich in Kleinbuchstaben umzuwandeln und danach den Vergleich durchzuführen. Hierfür kann man die Multibyte-Funktion mb_strtolower() verwenden. Innerhalb der runden Klammern wird als erster Parameter die Zeichenkette und als zweiter Parameter die Zeichenkodierung angegeben.

<?php

$str1 = 'äöü';
$str2 = 'ÄÖÜ';

$str1 = mb_strtolower ($str1, "UTF-8"); 
$str2 = mb_strtolower ($str2, "UTF-8"); 

// Ausgabe 0
echo strcasecmp ($str1, $str2);

?>

Eine Umwandlung in Kleinbuchstaben kann auch mit der Funktion mb_convert_case() erfolgen. Als erster Parameter wird der string angegeben. Als zweiter Parameter die Art der Umwandlung und als dritter Parameter die Zeichenkodierung.

<?php

$str1 = 'äöü';
$str2 = 'ÄÖÜ';

$str1 = mb_convert_case ($str1, MB_CASE_LOWER, "UTF-8"); 
$str2 = mb_convert_case ($str2, MB_CASE_LOWER, "UTF-8"); 

// Ausgabe 0
echo strcasecmp ($str1, $str2);

?>

Es wäre auch möglich, die strings in Großbuchstaben umzuwandeln und danach den Vergleich durchzuführen. Eine ähnliche Funtion ist strcmp(). Der Unterschied zu strcasecmp() besteht darin, dass der Vergleich bei strcmp() case-sensitive durchgeführt somit zwischen Groß- und Kleinschreibung unterschieden wird. Ansonsten sind sie identisch. Beide Funktionen sollten mit Vorsicht eingesetzt werden. Beispielsweise liefert strcasecmp (NULL, FALSE); auch einen Rückgabewert von 0, obwohl es sich hierbei nicht um identische strings handelt. Es kann sinnvoll sein, zum Vergleichen eine if-, else-Abfrage mit dem Vergleichsoperator === zu verwenden. Die Funktion strcasecmp() ist binary safe.