substr_compare în PHP

Compară o porțiune dintr-un text, care începe la o poziție dată, cu alt text.

Sintaxă
substr_compare(string $haystack, string $needle, int $offset, ?int $length = null, bool $case_insensitive = false): int

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.