Ce face strcmp / strcasecmp / strncmp
strcmp compară textele caracter cu caracter, după codul fiecărui octet. Returnează un număr negativ dacă primul text este „mai mic” (vine înainte în ordine), 0 dacă sunt identice și un număr pozitiv dacă primul este „mai mare”. Valoarea exactă nu contează, doar semnul.
strcasecmp face aceeași comparație, dar nu ține cont de litere mari și mici. strncmp compară doar primele $length caractere (există și strncasecmp, fără majuscule).
Sunt folosite mai ales ca funcție de comparare la sortare (usort). Pentru simpla verificare a egalității este suficient ===.
Parametri
| Parametru | Descriere |
|---|---|
$string1 |
Primul text. |
$string2 |
Al doilea text. |
$length |
Doar la strncmp: câte caractere de la început se compară. |
Ce returnează
Un număr negativ, 0 sau un număr pozitiv.
Exemple
Exemplul 1: Semnul rezultatului
Operatorul <=> transformă rezultatul în -1, 0 sau 1, ca să fie ușor de citit. Majusculele au coduri mai mici decât literele mici, de aceea „Ana” vine înaintea lui „ana”.
<?php
echo (strcmp("Ana", "Bogdan") <=> 0) . "\n";
echo (strcmp("Ana", "Ana") <=> 0) . "\n";
echo (strcmp("Ana", "ana") <=> 0) . "\n";
echo (strcasecmp("Ana", "ana") <=> 0);
Rezultat
-1
0
-1
0
Exemplul 2: Compararea doar a începutului cu strncmp
<?php
$coduri = ["RO123", "RO987", "BG456"];
foreach ($coduri as $cod) {
if (strncmp($cod, "RO", 2) === 0) {
echo "$cod este cod românesc\n";
}
}
Rezultat
RO123 este cod românesc
RO987 este cod românesc
Exemplul 3: Sortare alfabetică fără să conteze majusculele
<?php
$orase = ["iași", "Cluj", "arad", "Brașov"];
usort($orase, "strcasecmp");
echo implode(", ", $orase);
Rezultat
arad, Brașov, Cluj, iași
Greșeli frecvente
- Scrii
if (strcmp($a, $b))ca să verifici egalitatea. Condiția este adevărată când textele sunt diferite, pentru că egalitatea dă0. Compară cu=== 0sau folosește direct$a === $b. - Te aștepți ca
strcmpsă returneze exact -1 sau 1. Poate returna orice număr negativ sau pozitiv. Verifică doar semnul. - Sortezi cuvinte cu diacritice: comparația pe octeți pune „ă” sau „ș” după „z”. Pentru ordinea alfabetică românească folosește clasa
Collatordin extensia intl.
Comenzi înrudite
strnatcmp / strnatcasecmp: Compară două texte în „ordine naturală”, în care img2 vine înaintea lui img10.sort: Sortează elementele unui tablou crescător. Există și variante pentru descrescător și pentru chei.strtolower / strtoupper: Transformă toate literele unui text în litere mici (strtolower) sau mari (strtoupper).