Ce face substr_compare
substr_compare compară bucata din $haystack care începe la $offset cu $needle, fără să creeze un text nou cu substr. Returnează 0 dacă sunt egale, altfel un număr negativ sau pozitiv, ca strcmp.
Un $offset negativ se numără de la final, util pentru a verifica terminații. Cu $case_insensitive = true nu contează majusculele. În PHP 8, pentru început și sfârșit de text sunt mai simple str_starts_with și str_ends_with.
Parametri
| Parametru | Descriere |
|---|---|
$haystack |
Textul principal. |
$needle |
Textul cu care se compară. |
$offset |
Poziția din $haystack de la care începe comparația. Negativă: de la final. |
$length |
Opțional. Câte caractere se compară. |
$case_insensitive |
Opțional. true pentru comparație fără majuscule. |
Ce returnează
0 dacă porțiunile sunt egale, altfel un număr negativ sau pozitiv.
Exemple
Exemplul 1: Extensie de fișier, fără majuscule
<?php
foreach (["Poza.JPG", "poza.jpg", "poza.png"] as $fisier) {
$eJpg = substr_compare($fisier, ".jpg", -4, 4, true) === 0;
echo $fisier . " => " . ($eJpg ? "JPG" : "alt tip") . "\n";
}
Rezultat
Poza.JPG => JPG
poza.jpg => JPG
poza.png => alt tip
Exemplul 2: Comparație la mijlocul textului
<?php
$cod = "RO-IS-2026";
var_dump(substr_compare($cod, "IS", 3, 2) === 0);
var_dump(substr_compare($cod, "CJ", 3, 2) === 0);
Rezultat
bool(true)
bool(false)
Greșeli frecvente
- Scrii
if (substr_compare(...))pentru egalitate. Egalitatea dă0, deci condiția este falsă. Compară cu=== 0.
Comenzi înrudite
strcmp / strcasecmp / strncmp: Compară două texte și spune dacă primul este mai mic, egal sau mai mare decât al doilea.str_contains: Verifică dacă un text conține alt text. Returnează true sau false.substr: Extrage o bucată dintr-un text, pornind de la o anumită poziție.