BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 69 | UU: 3377

Porównywanie ciągów

Podstawową funkcją służącą do porównywania ciągów jest strcmp(). Jako jedyne 2 parametry przyjmuje ona ciągi tekstowe, które mają być porównane. Funkcja ta zwraca wartość 0 jeśli ciągi są takie same, wartość większą od zera jeśli pierwszy ciąg jest większy od drugiego lub wartość mniejszą od zera jeśli pierwszy ciąg jest mniejszy od drugiega. Funkcja ta rozróżnia wielkość znaków. Jeśli zachodzi potrzeba porównania dwóch ciągów, to należy użyć funkcji strcasecmp() (parametry i wartości zwracane takie jak przy funkcji strcmp). Istnieje także funkcja strncmp(), która porównuje tylko taką ilość początkowych znaków z podanych ciągów, jaka została podana jako trzeci parametr tej funkcji. Oczywiście istnieje też wersja funkcji strncmp() ignorująca wielkość znaków: strncasecmp().

Istnieje racjonalne wytłumaczenie dlaczego ciągi należy porównywać za pomocą funkcji strcmp() lub pochodnych a nie zwykłego operatora porównania '=='. Interpreter języka PHP stara się być mądrzejszy od programisty automatycznie konwertując typy zmiennych aby przy porównywaniu ich były takie same.

Przykład 9.1. Proste porównywanie ciągów



<?php
   $a
=0;
   
$b="0papa";
   if(
$a==$b)
      echo 
"Tak";
   else
      echo 
"Nie";
?>

Powyższy przykład wyświetli "Tak", pomimo że te zmienne są różne. Dlaczego? Ponieważ PHP automatycznie konwertuje zmienną $b do typu liczbowego, przez co zamieniana jest ona na liczbową wartość 0 (która faktycznie jest na pierwszym miejscu ciągu - pozostałe znaki są odrzucane ponieważ nie są liczbami). Można teoretycznie użyć operatora "===" - porównania nie tylko wartości, ale też typu.

Przykład 9.2. Operator identyczności



<?php
   $a
=0;
   
$b="0";
   if(
$a===$b)
      echo 
"Tak";
   else
      echo 
"Nie";
?>

Powyższy przykład wyświetli "Nie", bo pomimo że obie zmienne mają wartość 0, to zmienna $a jest liczbą, a zmienna $b ciągiem tekstowym.

Funkcja strstr() służy do sprawdzania, czy podany ciąg jest fragmentem innego ciągu. Funkcja przyjmuje dwa parametry: przeszukiwany ciąg ('stóg siana') i szukany ciąg ('igła'). Jeśli dany ciąg jest fragmentem podanego, to zwracany jest ciąg - fragment przeszukiwanego ciągu od pierwszego wystąpienia szukanego ciągu do końca.

Przykład 9.3. Zastosowanie funkcji strstr



<?php
   $email 
"prezydent@polska.pl";
   
$domena strstr($email"@");
      echo 
$domena;
?>

Powyższy przykład wyświetli "@polska.pl". Jeśli ciąg nie jest znaleziony, to zwracana jest wartość FALSE, dzięki czemu funkcję tą można używać w instrukcjach warunkowych.

Przykład 9.4. Użycie funkcji strstr() w warunku



<?php
   $email 
"prezydent@polska.pl";
   if(
strstr($email"polska")!==False)
      echo 
"Email ma w sobie słowo 'polska'";
?>

Przy używaniu tej funkcji trzeba pamiętać o jednej rzeczy. Łatwo jest pomylić zwracaną wartość 'znaleziono na pozycji 0' i 'nie znaleziono', ponieważ wartość logiczna 'true' przy porównaniach może być skonwertowana do wartości liczbowej 0. Aby tego uniknąć należy używać operatora porównania ze sprawdzaniem typu ('===' lub '!==').

Istnieje także wersja tej funkcji ignorująca wielkość znaków: stristr()(przyjmowane parametry i zwracane wartości takie jak przy funcji strstr).

Pomimo, że funkcji strstr() można używać do sprawdzania czy jeden ciąg jest częścią drugiego, to jest ona nieefektywna. Lepiej skorzystać z funkcji strpos().

Do sprawdzania, czy ciąg tekstowy pasuje do wyrażenia regularnego używa się funkcji ereg() która jako pierwszy parametr przyjmuje wyrażenie regularne, a jako drugi ciąg który ma być porównany z wyrażeniem. Istnieje także wersja tej funkcji ignorująca wielkość znaków: eregi(). Zwracana jest wartość true jeśli ciąg pasuje do wyrażenia regularnego, a false jeśli nie pasuje.

Zazwyczaj przy instrukcjach warunkowych w którch korzysta się z funkcji sprawdzającej jakiś warunek, funkcja ta zwraca wartość TRUE jeśli warunek jest spełniony, np. funkcja ereg zwraca tą wartość jeśli dany ciąg pasuje do danego wyrażenia regularnego.

Przykład 9.5. Użycie funkcji ereg w warunku



<?php
   
if(ereg(".*"$ciag))
     echo 
"Znalazłem!";
?>

W przypadku funkcji strcmp() i pochodnych jest trochę inaczej, gdyż jeśli ciągi są identyczne to zwracana jest wartość 0 uznawana za logiczne FALSE.

Przykład 9.6. Porównywanie ciągów przy użyciu funkcji strcmp



<?php
   
if(!strcmp("cośtam"$string))
      echo 
" to cośtam!";
?>
Copyright © 2006-2011 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker