strncmp

strncmp($string1, $string2, $length)

Porównuje dwa ciągi jak strcmp(), ale tylko do podanej długości. Najczęściej sprawdza się nią, czy ciąg zaczyna się od określonego tekstu.

Parametry

  • $string1, $string2 – porównywane ciągi.
  • $length – ile bajtów od początku porównać.

Przykłady

var_dump(strncmp("garth.cz", "garth.com", 5)); // int(0)
var_dump(strncmp("garth.cz", "garth.com", 8) === 0); // bool(false)
// czy URL zaczyna się od https://?
$url = "https://www.garth.cz";
var_dump(strncmp($url, "https://", 8) === 0); // bool(true)
// długość lepiej obliczyć, niż wpisać ręcznie
$start = "www.";
var_dump(strncmp("www.garth.cz", $start, strlen($start)) === 0); // bool(true)
// to samo sprawdzenie innymi funkcjami
var_dump(strpos($url, "https://") === 0); // bool(true)
var_dump(substr($url, 0, 8) === "https://"); // bool(true)
// długość jest w bajtach – dwa bajty to tylko litera Ł
var_dump(strncmp("Łódź", "Łąka", 2)); // int(0)
// pierwsze dwa znaki tekstu z polskimi znakami
var_dump(mb_substr("Łódź", 0, 2) === mb_substr("Łąka", 0, 2)); // bool(false)

Na co uważać

  • Zgodność to 0. Pisz strncmp(…) === 0, warunek if (strncmp(…)) jest spełniony odwrotnie, gdy ciągi się różnią.
  • Długość jest w bajtach. Dla stałego początku obliczaj ją przez strlen(), ręcznie wpisana liczba łatwo przestaje pasować do tekstu – zwłaszcza przy literach ze znakami diakrytycznymi.
  • Ujemna długość jest błędem: PHP 7 wypisuje ostrzeżenie i zwraca false, PHP 8 rzuca wyjątek ValueError.
  • W PHP 8 do sprawdzenia początku ciągu czytelniejsza jest funkcja str_starts_with().
  • Rozróżnia wielkość liter. strncasecmp() porównuje bez tej różnicy.

Powiązane funkcje:
strcmp()
strncasecmp()
strpos()