W3docs

strcasecmp()

Erklärung der PHP-Funktion strcasecmp() zum Vergleich zweier Strings ohne Berücksichtigung der Groß-/Kleinschreibung mit Syntax und Beispielen.

strcasecmp() ist eine eingebaute PHP-Funktion, die zwei Strings ohne Berücksichtigung der Groß-/Kleinschreibung vergleicht — "Hello" und "hello" werden also als gleich behandelt. Sie führt einen binärsicheren Vergleich durch und gibt eine Zahl zurück, die nicht nur angibt, ob sich die Strings unterscheiden, sondern auch, welcher davon in der Byte-Reihenfolge „größer" ist. Diese Seite behandelt die Syntax, die genaue Bedeutung des Rückgabewertes, praktische Beispiele, häufige Fallstricke und die Unterschiede zu verwandten Funktionen.

Syntax

strcasecmp(string $string1, string $string2): int

Die Funktion erwartet zwei Parameter, die beide erforderlich sind:

  • $string1 — der erste zu vergleichende String.
  • $string2 — der zweite zu vergleichende String.

Rückgabewert

Dies ist der Teil, den die meisten falsch verstehen. strcasecmp() gibt nicht true/false zurück, sondern einen Integer:

  • 0, wenn die beiden Strings gleich sind (ohne Berücksichtigung der Groß-/Kleinschreibung).
  • Einen Wert kleiner als 0, wenn $string1 „kleiner als" $string2 ist.
  • Einen Wert größer als 0, wenn $string1 „größer als" $string2 ist.

Der Vergleich basiert auf den Byte-Werten der (in Kleinbuchstaben umgewandelten) Zeichen, sodass das Ergebnis auch eine alphabetische Reihenfolge liefert — was die Funktion nützlich für Sortier-Callbacks macht.

Grundlegendes Beispiel

php— editable, runs on the server

Hier unterscheiden sich $string1 und $string2 nur in der Groß-/Kleinschreibung, sodass strcasecmp() den Wert 0 zurückgibt und die Bedingung $result == 0 wahr ist.

Die Ausgabe dieses Codes lautet:

The two strings are equal.

Den Vorzeichen des Ergebnisses interpretieren

Wenn die Strings nicht gleich sind, gibt das Vorzeichen deren Reihenfolge an. Beachte, dass der genaue Betrag nicht über PHP-Versionen hinweg standardisiert ist — nur das Vorzeichen (negativ, null, positiv) ist aussagekräftig, daher immer explizit mit 0 vergleichen.

<?php
// "apple" comes before "Banana" alphabetically (case ignored)
var_dump(strcasecmp("apple", "Banana") < 0);   // bool(true)
var_dump(strcasecmp("Banana", "apple") > 0);   // bool(true)
var_dump(strcasecmp("PHP", "php") === 0);       // bool(true)
?>

Ausgabe:

bool(true)
bool(true)
bool(true)

Praktische Verwendung: Groß-/Kleinschreibungs-unabhängige Login-Prüfung

Ein häufiger Praxisfall ist der Vergleich von Benutzereingaben, bei denen die Groß-/Kleinschreibung keine Rolle spielen soll, z. B. ein Benutzername oder eine Ja/Nein-Antwort.

<?php
$input = "ADMIN";
if (strcasecmp($input, "admin") === 0) {
    echo "Welcome, admin!";
} else {
    echo "Access denied.";
}
?>

Ausgabe:

Welcome, admin!

Als Sortier-Komparator verwenden

Da die Funktion einen Ordnungs-Integer zurückgibt, ist strcasecmp() ein natürlicher Callback für usort(), um Strings alphabetisch zu sortieren und dabei die Groß-/Kleinschreibung zu ignorieren.

<?php
$names = ["banana", "Apple", "cherry", "apple"];
usort($names, "strcasecmp");
print_r($names);
?>

Ausgabe:

Array
(
    [0] => Apple
    [1] => apple
    [2] => banana
    [3] => cherry
)

Häufige Fallstricke

  • Die Funktion gibt einen Integer zurück, kein boolean. if (strcasecmp($a, $b)) zu schreiben ist ein Fehler: Der Block wird ausgeführt, wenn die Strings verschieden sind (ungleich null), und wird übersprungen, wenn sie gleich sind (0). Immer explizit mit === 0 vergleichen.
  • Byte-basiert, nicht Unicode-bewusst. strcasecmp() wandelt nur ASCII-Buchstaben A–Z in Kleinbuchstaben um. Akzentuierte oder Multibyte-Zeichen (wie É vs. é) werden nicht als gleich behandelt. Für locale-bewusste Multibyte-Vergleiche beide Strings zuerst normalisieren oder die intl-Erweiterung verwenden.
  • Leerzeichen und abschließende Zeichen sind relevant. strcasecmp("yes", "yes ") ist ungleich null. Eingaben bei Bedarf mit trim() bereinigen.

Verwandte Funktionen

  • strcmp() — das Groß-/Kleinschreibung-sensitive Gegenstück; gleiche Rückgabesemantik.
  • strncasecmp() — Groß-/Kleinschreibung-unsensitiver Vergleich nur der ersten n Zeichen.
  • strtolower() — wandelt einen String in Kleinbuchstaben um, nützlich vor einem manuellen Vergleich.

Zusammenfassung

strcasecmp() vergleicht zwei Strings ohne Berücksichtigung der Groß-/Kleinschreibung und gibt 0 zurück, wenn sie übereinstimmen, eine negative Zahl, wenn der erste kleiner ist, und eine positive Zahl, wenn er größer ist. Denke daran, das Ergebnis gegen 0 zu testen, anstatt es als boolean zu behandeln, und verwende strcmp(), wenn die Groß-/Kleinschreibung berücksichtigt werden soll.

Übungen

Übung
Was macht die strcasecmp()-Funktion in PHP?
Was macht die strcasecmp()-Funktion in PHP?
Was this page helpful?