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



©® Media Nauka 2008-2023 r.