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, ART-4215





Polecamy w naszym sklepie

Matematyka konkretna
Kolorowe skarpetki Miasto
Kolorowe skarpetki Kostka
kolorowe skarpetki góra lodowa
Kolorowe skarpetki urodzinowe
Niektóre treści nie są dostosowane do Twojego profilu. Jeżeli jesteś pełnoletni możesz wyrazić zgodę na przetwarzanie swoich danych osobowych. W ten sposób będziesz miał także wpływ na rozwój naszego serwisu.
© ® Media Nauka 2008-2022 r.