Porównywanie ciągów znaków w PHP
Dość często przy programowaniu w PHP zachodzi potrzeba porównywania zmiennych tekstowych (typu string). Można używać w PHP zarówno operatorów jak i wbudowanych funkcji. Niestety często okazuje się, że funkcje i operatory dają wyniki różne od oczekiwanych. Przyczyny są różne i trzeba się zdać na praktykę w stosowaniu rożnych metod, a przede wszystkim dobrze je zrozumieć.
Porównywanie tekstów przy pomocy operatora identyczności "===".
Operator identyczności "===" to dobry sposób na porównanie zmiennych typu string. W ten sposób zbadamy oprócz równości wartości zmiennych także typy tych zmiennych.
Poniższy przykład pokazuje zastosowanie operatora identyczności i zwykłego porównania, które może dać nieoczekiwany wynik.
Przykład 1
<?php $t1=2021;
$t2='2021';
$t3='2021 rok';
echo '$t1=2021;<br>';
echo '$t2=\'2021\';<br>';
echo '$t3=\'2021 rok\';<br><br>';
echo 'Porównanie z użyciem operatora "=="<br>';
if ($t1==$t2) {
echo 'zmiennie $t1 i $t2 są równe';
}
else{
echo 'zmiennie $t1 i $t2 nie są równe';
}
echo '<br>';
if ($t1==$t3) {
echo 'zmiennie $t1 i $t3 są równe';
}
else{
echo 'zmiennie $t1 i $t3 nie są równe';
}
echo '<br>';
if ($t2==$t3) {
echo 'zmiennie $t2 i $t3 są równe';
}
else{
echo 'zmiennie $t2 i $t3 nie są równe';
}
echo '<br><br>';
//Identyczność
echo 'Porównanie z użyciem operatora "==="<br><br>';
if ($t1===$t2) {
echo 'zmiennie $t1 i $t2 są równe';
}
else{
echo 'zmiennie $t1 i $t2 nie są równe';
}
echo '<br>';
if ($t1===$t3) {
echo 'zmiennie $t1 i $t3 są równe';
}
else{
echo 'zmiennie $t1 i $t3 nie są równe';
}
echo '<br>';
if ($t2===$t3) {
echo 'zmiennie $t2 i $t3 są równe';
}
else{
echo 'zmiennie $t2 i $t3 nie są równe';
} ?>
Zmienne $t1, $t2, $t3 nie są równe, gdyż pierwsza z nich to liczba, druga zawiera tekst, a trzecia zawiera nieco dłuższy tekst. Porównanie tych zmiennych daje jednak trochę nieoczekiwany wynik. Owszem, ewidentnie zmienne $t2 i $t3 są różne, ale dlaczego uzyskujemy twierdzący wynik w pozostałych przypadkach?
Gdy porównujemy $t1 i $t2 mamy do czynienia w przypadku $t1 z liczbą, wobec czego interpreter PHP rzutuje zmienną $t2 na typ int (całkowity), w wyniku czego otrzymujemy te same wartości - 2021.
Zauważ, że to samo dotyczy porównania $t1 i $t3. Ponieważ spacja i słowo "rok" nie są liczbami, dlatego konwersję przechodzą tylko cztery pierwsze znaki, dając w wyniku konwersji wartość 2021.
Używając operatora identyczności "===" sprawdzamy przy okazji zgodności typów zmiennych i teraz otrzymujemy zupełnie inne wyniki porównywania naszych trzech zmiennych tekstowych.
Funkcje porównania
Oto wykaz wybranych funkcji porównania tekstów.
Funkcja | Składnia | Opis |
strcasecmp | strcasecmp($tekst1, $tekst2) | Funkcja strcasecmp w PHP jest wykorzystywana do porównywania ciągów znakowych bez rozróżniania wielkich i małych liter. |
strcmp | strcmp($tekst1, $tekst2) | Funkcja strcmp w PHP jest wykorzystywana do porównywania ciągów znakowych. |
strncmp | strncmp($tekst1, $tekst2,$n) | Funkcja strcmp w PHP jest wykorzystywana do porównywania $n-pierwszych ciągów znakowych. |
© medianauka.pl, 2021-10-31, A-4215
Data aktualizacji artykułu: 2024-06-29