Funktion strcmp() - strings case-sensitive vergleichen

Bei der Verwendung von Zeichenketten muss man diese in PHP manchmal mit anderen Zeichenketten vergleichen. Ein typisches Beispiel hierfür ist der Name einer Datei. Für solche Aufgaben kann die Funktion strcmp() genutzt werden. Diese funktioniert im Grunde wie die Funktion strcasecmp(), nur mit dem Unterschied, dass der Vergleich case-sensitive durchgeführt und somit zwischen Groß- und Kleinschreibung unterschieden wird. Innerhalb der runden Klammern gibt man die folgenden Parameter an.

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

Bei dem folgenden Beispiel werden die Variablen $str1 und $str2 miteinander verglichen.

<?php

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

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

?>

Der Rückgabewert von strcmp()

Als Rückgabewert von strcmp() erhält man eine Ganzzahl vom Datentyp int. Der Rückgabewert kann dabei wie folgt sein.

  • 0 bei identischen strings.
  • <0, falls der erste string kleiner als der zweite ist.
  • >0, falls der erste string größer als der zweite ist.

Ob string kleiner oder größer ist, wird durch die ASCII-Werte ermittelt. Maßgebend dabei sind die ersten, nicht identischen Zeichen. Da beispielsweise Z einen höheren ASCII-Wert hat als A, ist beim folgenden Beispiel der Rückgabewert kleiner als 0.

<?php

$str1 = 'A';
$str2 = 'Z';

// Ausgabe -25
echo strcmp ($str1, $str2);

?>

Falls vor den nicht identischen Zeichen sich ein oder mehrere Zeichen befinden, die identisch sind, wird die Differenz der ASCII-Werte von den nicht identischen Zeichen mit 256 multipliziert und als Rückgabewert zurückgegeben.

<?php

$str1 = 'AAAA';
$str2 = 'AAAB';

// Ausgabe -256
echo strcmp ($str1, $str2);

?>

Falls der 2. string leer ist, wird als Rückgabewert die Anzahl der Zeichen vom nicht leeren string zurückgegeben.

<?php

$str1 = 'ABCDEF';
$str2 = '';

// Ausgabe 6
echo strcmp ($str1, $str2);

?>

Fall der 1. string leer ist, wird als Rückgabewert ebenfalls die Anzahl der Zeichen vom nicht leeren string zurückgegeben, nur mit dem Unterschied, dass der Wert negativ ist.

<?php

$str1 = '';
$str2 = 'ABCDEF';

// Ausgabe -6
echo strcmp ($str1, $str2);

?>

Die Funktion sollte mit Vorsicht eingesetzt werden. Beispielsweise liefert strcmp(NULL, FALSE); ebenfalls den Rückgabewert 0, obwohl es sich hierbei nicht um identische strings handelt. Daher kann es vorteilhafter sein, zum Vergleich eine normale if-, else-Abfrage mit dem Vergleichsoperator === zu verwenden. Die Funktion strcmp() ist binary safe.