Dom - Mobilni uredaji
Php usporedba ne razlikuje velika i mala slova. PHP praksa: Usporedba nizova

Ovo poglavlje opisuje operatore usporedbe. Ovi operatori testiraju jednakost (kao što je jednako, manje od, identično jednako itd.) između dvije vrijednosti i vraćaju true ili false ovisno o tome kako su operandi povezani. Operatori usporedbe uvijek vraćaju Booleove vrijednosti, a te se vrijednosti najčešće koriste u izjavama kao što su , while ili for za kontrolu tijeka izvršavanja programa.

Operatori usporedbe
PrimjerImeProizlaziti
$i == $yJednakoTRUE ako je $i jednako $y nakon pretvorbe tipa podataka.
$i === $yIdentičnoTRUE ako je $i jednako $y i ima isti tip podataka.
$i != $yNejednak
$i<>$yNejednakTRUE ako $i nije jednako $y nakon pretvorbe tipa podataka.
$i !== $yNije identičnoTRUE ako $i nije jednako $y ili su različitih vrsta.
$i< $y ManjeTRUE ako je $i striktno manji od $y.
$i > $yVišeTOČNO ako je $i striktno veće od $y.
$i<= $y Manje ili jednakoTRUE ako je $i manje ili jednako $y.
$i >= $yViše ili jednakoTRUE ako je $i veće ili jednako $y.

Napomena: ako pokušate prikazati rezultat operacije usporedbe na zaslonu, vrijednost true bit će prikazana u prozoru preglednika kao 1. Vrijednost false odgovara broju 0 ​​i ne prikazuje se na zaslonu (u načelu, trebali zapamtiti ovo iz opisa boolean tipa). Ako želite vidjeti rezultat kao true ili false, koristite funkciju var_dump().

Također je vrijedno napomenuti: ako se uspoređuju niz s brojem ili dva niza koji sadrže brojeve, svaki niz će se pretvoriti u broj i uspoređivat će se kao brojevi.

Operator == (jednakosti)

Operator == (jednakost) prihvaća operande bilo koje vrste; ako su dva operanda jednaka, vraća true, inače vraća false.

Ako su operandi različitih tipova podataka, PHP će ih pokušati pretvoriti u isti tip podataka prije nego što ih usporedi, na primjer izraz "4" == 4 će vratiti true jer će PHP automatski pretvoriti vrijednosti koje se uspoređuju s isti tip podataka. Slično, izraz $a == 1 vratit će true ako varijabla $a sadrži vrijednost 1. Ako želite izbjeći implicitnu konverziju tipa prilikom uspoređivanja, trebali biste koristiti operator identiteta, o čemu ćemo kasnije raspravljati.

Operator === (identiteti)

Operator === (identitet) prihvaća operande bilo koje vrste i vraća true ako su njihove vrijednosti iste (jednake), i false ako su različite. Po čemu se razlikuje od operatora jednakosti? Operator identiteta testira dva operanda za "identitet" na temelju stroge definicije podudaranja, što znači da osim što su vrijednosti samih operanda jednake, oni također moraju biti istog tipa podataka. Kao primjer, razmotrite izraz kao što je 5 === "5" , rezultat ovog izraza bit će lažan jer je vrijednost s lijeve strane broj, a vrijednost s desne strane niz, odnosno ove vrijednosti imaju različite vrste podataka. Zapamtite da operatori == i === znače "jednako" i "identično/identično jednako".

Operator != ili<>(nejednakosti)

Operator nejednakosti ima dvije vrste: != i<>. Suprotan je od operatora == i vraća true ako operandi nisu jednaki. Operator nejednakosti vraća false samo ako su vrijednosti s obje strane jednake jedna drugoj.

$var2); // vrati false var_dump("Početna"<>"Dom"); // vrati istinito ?>

Operator !== (neidentitet)

Operator !== (neidentitetski) radi upravo suprotno od operatora ===. Vraća true ako vrijednosti operanda nisu međusobno jednake ili nisu iste vrste podataka. Kao primjer, razmotrite sljedeći izraz: 7 !== "7" , operator "neidentiteta" vratit će true jer je vrijednost s lijeve strane broj, a vrijednost s desne niz, što znači da su različite tipovi podataka. Odavde će biti lako zapamtiti da operatori != i !== znače "nije jednako" i "nije identično/identično nije jednako."

Operater > (više)

Kada koristite operator > (veće od), usporedba vraća true samo ako je vrijednost s lijeve strane operatora veća od vrijednosti s desne strane. Kao i drugi operatori, operator > radi ne samo s numeričkim vrijednostima, već i s vrijednostima niza. Ali kako jedna linija može biti veća od druge?

Kada radite sa nizovima, malo slovo je veće od velikog slova. Prilikom uspoređivanja nizova, PHP prvo provjerava nepodudaranje prvog slova niza. Ako se ne pronađe razlika, prelazi se na sljedeći znak, i tako dalje, dok se ne pronađe razlika ili dok se ne dosegne kraj retka. Ako su dvije vrijednosti s obje strane operatora > jednake, operator će također vratiti false.

3); // vrati istinito var_dump("Bok" > "bok"); // vrati false var_dump(1 > 1); // vrati false ?>

Operater< (меньше)

Operater< (меньше ) является функциональной противоположностью оператора «больше». Он возвращает true , когда значение слева от него меньше значения, находящегося справа, и false , если значение левого операнда больше правого или значения равны.

Operator >= (veće ili jednako)

Operator >= ( više ili jednako) malo se razlikuje od operatora usporedbe o kojima smo ranije raspravljali. Dodaje mogućnost da dvije vrijednosti s obje strane budu jednake, to jest, da bi se vratilo true, vrijednost s lijeve strane operatora mora biti veća ili jednaka vrijednosti s desne strane. Operator veće od ili jednako vraća false samo ako je vrijednost lijevo od njega manja od vrijednosti desno.

= 5); // vrati istinito var_dump("bok" >= "bok"); // vrati true var_dump(1 >= 2); // vrati false ?>

Operater<= (manje ili jednako)

Operater<= (меньше или равно) похож на оператор «больше или равно». Чтобы оператор <= вернул true , значение слева от оператора должно быть меньше или равно значению справа от него. Он возвращает false , только если значение слева от него больше, чем значение справа.

Uspoređuje nizove.

Sintaksa:

Int strcmp(niz str1, niz str2)

substr_compare()

Binarno sigurna usporedba 2 niza s pomakom, osjetljiva na velika ili mala slova (PHP 5)

Opis:

Int substr_compare (string main_str, string str, int offset [, int length [, bool case_sensitivity]])

substr_compare() uspoređuje string main_str počevši od znaka određenog argumentom offset s nizom str. Usporedba uključuje maksimalnu duljinu znakova.

Vraća broj 0 ako je veći od str i 0 ako su nizovi jednaki. Ako je duljina veća ili jednaka duljini main_str i proslijeđen je pomak, substr_compare() izdaje upozorenje i vraća FALSE.

Ako je case_sensitivity TRUE, usporedba je osjetljiva na velika i mala slova.

Primjer korištenja substr_compare()

echo substr_compare("abcde", "bc", 1, 2); // 0
echo substr_compare("abcde", "bcg", 1, 2); // 0
echo substr_compare("abcde", "BC", 1, 2, istina); // 0
echo substr_compare("abcde", "bc", 1, 3); // 1
echo substr_compare("abcde", "cd", 1, 2); // -1
echo substr_compare("abcde", "abc", 5, 1); // upozorenje
?>

Uspoređuje početke nizova.
Sintaksa:

Int strncmp(string str1, string str2, int len)

Ova se funkcija razlikuje od strcmp() po tome što ne uspoređuje cijelu riječ, već prve len ​​bajtove. Ako je len manji od duljine najmanjeg niza, uspoređuju se cijeli nizovi.
Ova funkcija uspoređuje dva niza znak po znak (točnije, bajt bajt) i vraća:

0 - ako se nizovi potpuno podudaraju;

1 - ako je niz str1 leksikografski manji od str2;

1 - ako je, naprotiv, str1 "veći" od str2.

Budući da je usporedba bajt po bajt, veličina znakova utječe na rezultate usporedbi.

strcasecmp

Uspoređuje nizove na način koji ne razlikuje velika i mala slova.
Sintaksa:

Int strcasecmp(string str1, string str2)

Isto kao strcmp(), samo što ne uzima u obzir velika i velika slova.

$str1 = "Zdravo!";
$str2 = "zdravo!";
if(!strcesecmp($str1, $str2))
echo "$str1 == $str2 pri usporedbi nizova koji ne razlikuju velika i mala slova";

strncasecmp

Uspoređuje početke nizova na način koji ne razlikuje velika i mala slova.
Sintaksa:

Int strncasecmp(string str1, string str2, int len)

Funkcija strncasecmp() kombinacija je funkcija strcasecmp() i strncmp().

strnatcmp

Izvodi "prirodnu" usporedbu nizova.
Sintaksa:

Int strnatcmp(niz str1, niz str2)

Ova funkcija simulira usporedbu nizova koju bi koristio čovjek.

$arr1 = $arr2 = niz("img12.png", "img10.png", "img2.png", "img1.png");
echo "Normalno sortiranje";
usort($arr1, "strcmp");
ispis_r($arr1);
echo "nPrirodno sortiranje";
usort($arr2, "strnatcmp");
ispis_r($arr2);

Ova skripta će ispisati sljedeće:

Normalno sortiranjeniza(
=> img1.png
=> img10.png
=> img12.png
=> img2.png
)

Prirodni sortirani niz(
=> img1.png
=> img2.png
=> img10.png
=> img12.png
)

strnatcasecmp

Izvodi "prirodnu" usporedbu nizova bez obzira na velika i mala slova.
Sintaksa:

Int strnatcasecmp(string str1, string str2)

Isto kao strnatcmp(), ali zanemaruje velika i mala slova.

sličan_tekst

Određuje sličnost dva niza.
Sintaksa:

Int sličan_tekst(prvi niz, drugi niz [, dvostruki postotak])

Funkcija similar_text() izračunava sličnost dva niza pomoću algoritma koji je opisao Oliver.
Ali umjesto stoga (kao u Oliverovom pseudokod-u), koristi rekurzivne pozive.
Složenost algoritma čini funkciju sporom, a njezina brzina proporcionalna je (N^3), gdje je N duljina najvećeg niza.
Funkcija vraća broj znakova koji su se podudarali u oba niza. Prilikom prosljeđivanja trećeg izbornog parametra prema referenci, on pohranjuje postotak podudaranja niza.

levenštein

Određivanje Levenshteinove razlike dviju žica.
Sintaksa:

Int levenshtein(string str1, string str2)
int levenshtein(string str1, string str2, int cost_ins, int cost_rep, int cost_del)
int levenshtein(string str1, string str2, trošak funkcije)

Levenshteinova razlika je minimalni broj znakova koje bi trebalo zamijeniti, umetnuti ili izbrisati da bi se str1 pretvorio u str2. Složenost algoritma proporcionalna je umnošku duljina nizova str1 i str2, što funkciju čini bržom od similar_text().

Prvi oblik funkcije vraća broj potrebnih operacija nad znakovima niza za transformaciju str1 u str2.

Drugi obrazac ima tri dodatna parametra: trošak operacija umetanja, zamjene i brisanja, što ga čini pogodnijim za izračun, ali istovremeno i manje brzim. Vraća se integralni pokazatelj složenosti transformacije.
Treća opcija omogućuje određivanje funkcije koja se koristi za izračun složenosti transformacije.
Funkcija troška se poziva sa sljedećim argumentima:

primijenjena operacija (umetanje, promjena, brisanje): "I*, "R", "D";

stvarni znak prvog retka

stvarni znak drugog retka

položaj linije 1

položaj linije 2

preostala dužina linije 1

preostala duljina linije 2

Pozvana funkcija morat će vratiti trošak ove operacije.
Ako je jedan od nizova dulji od 255 znakova, levenshtein() vraća -1.
ali ova dužina je više nego dovoljna.

strcoll()

Usporedite nizove na temelju trenutne lokalne postavke (PHP 4 >= 4.0.5, PHP 5)

Opis:

Int strcoll (string str1, string str2)

Vraća pozitivan broj ako je str1 manji od str2; negativan broj ako je str1 veći od str2 i 0 ako su nizovi jednaki. strcoll() koristi postavke trenutne lokalne postavke pri usporedbi. Ako je lokalizacija C ili POSIX, ova funkcija je ista kao strcmp().

Imajte na umu da ova funkcija razlikuje velika i mala slova i, za razliku od strcmp(), nije binarno sigurna.

PHP je dobro orijentiran na obradu informacija. Sintaksa jezika predstavljena je potpunim skupom funkcija za usporedbu, obradom nizova i operatorima za usporedbu.

Svaki algoritam je niz izbora i akcija. Ali prije nego što napravite izbor, morate nešto usporediti s nečim. Nizovi su najsadržajniji, najučinkovitiji i najpraktičniji mehanizam za upravljanje algoritmom. Redovi su opcija za prikaz podataka. A podaci su glavna briga svakog algoritma.

Konvencionalna logika usporedbe-radnje

Općenito, jezik ne pravi nikakve posebne razlike u podacima; na primjer, u PHP-u, usporedba niza i broja nije mnogo drugačija. Broj je također niz kada sadrži samo znamenke, točku i nema znakova koji se ne koriste za predstavljanje broja u bilo kojem obliku (matematički zapis).

U slučaju kontenacije, broj se automatski spaja u niz bez nepotrebnih pitanja i bez skrivenih pogrešaka, čak i ako funkcija gettype() vraća "integer" ili "double".

Međutim, postoji razlika između korištenja funkcija is_int() i is_numeric(). Prvi daje true kada je parametar samo cijeli broj, drugi kada je bilo koji broj ili numerički niz (varijabla je tipa "string", ali sadrži sve što je predviđeno matematičkim zapisom).

Ovaj jednostavan primjer dobar je primjer kako PHP operatori usporedbe nizova ("==", "===", "!=", ...) mogu predstavljati mnoga iznenađenja. Varijable mogu promijeniti svoj tip; one nisu uvijek brojevi, ali se gotovo uvijek mogu pretvoriti u niz. U ekstremnim slučajevima to će biti prazan niz.

Na temelju gore navedenog, funkcija usporedbe nizova najpopularnija je u PHP-u. Na programeru je da odluči koji će odabrati. Dostupne su mnoge opcije, uključujući regularne izraze.

Ograničenja dostupne funkcionalnosti

PHP usporedbu dva niza dobro radi funkcija strpos() - najjeftinija, najtočnija i najpraktičnija opcija. Ako je funkcija broj, onda je jedan niz definitivno jednak drugom ili je jedan uključen u drugi.

Radikalno suprotan, ali i apsolutno ispravan pristup je korištenje regularnih izraza.

Ako poziv funkcije $cResult = scCheckFileName($cStr) vrati "true", tada je niz naziv Word datoteke. Imat će samo jednu opciju proširenja ".docx" i bez simbola u nazivu: samo slova, brojke i znakove "_", "-".

Funkcija se lako može pretvoriti u druge vrste datoteka: $cPtr = "/^((4,239))\.(html|js|css|png|jpg|docx|txt)(1)$/u". Ova opcija za provjeru stringa proširuje raspon učitanih (npr. u PHP-u usporedba nizova se koristi “za upload datoteka na server, bez ikakve šanse za grešku pri unosu”) na html, js, css, ...

Korištenje strpos() i preg_match() su ekstremi. Oni nisu izravno povezani s pitanjem usporedbe pojmova. Ali pitanje algoritma je pitanje primjene kombinacije stilova, koristeći sve mogućnosti za postizanje pouzdanog i ispravnog rezultata.

PHP funkcionalnost: usporedba nizova

Arsenal jezika za usporedbu nizova uključuje ne samo čiste funkcije usporedbe, već i kombinaciju s pretraživanjem ili izravnom zamjenom. Radnja ne mora uvijek biti ista kao usporedba, budući da potonja ne mora nužno mijenjati niti jedan red. Često morate odabrati jednu ili drugu granu algoritma.

Uobičajena verzija PHP-a: usporedba nizova izvodi se funkcijom int strcmp (s1, s2).

Rezultat funkcije:

  • 0 - nizovi su jednaki;
  • -1 - prva linija je manja od druge;
  • 1 - prva linija je veća od druge.

U praksi to znači da je prvi niz uključen u drugi, o čemu PHP funkcija (usporedba nizova) donosi odluku. Ograničenija varijanta strpos(), budući da u potonjem slučaju može biti poznata pozicija pojavljivanja.

Funkcija strcmp() razlikuje velika i mala slova. Ako trebate usporediti nizove na način koji ne razlikuje velika i mala slova, PHP predlaže korištenje strcasecmp(). Sintaksa je slična.

U praksi je često potrebno raditi ne s cijelim nizom, već samo s njegovim dijelom. Da biste to učinili, skup PHP funkcija (usporedba nizova) uključuje strncmp (s1, s2, N). Treći parametar određuje usporedbu samo N-bajtova. Rezultat je isti kao strcmp().

Nizovi, nizovi i usporedba

Podaci su gotovo uvijek predstavljeni kao nizovi. Ako uzmemo u obzir nizove, objekte ili informacijske strukture, onda su to jednostavno različite kombinacije jednostavnijih string struktura.

Nizovi nizova i nizovi mogu se prikazati na komplementaran način. Transformacija niza u niz pomoću funkcije implode(array, symbol), na primjer: $margins1 = implode(", ", $style->getInnerMargin()); ...rad algoritma/korisnika...; $margins2 = implode(", ", $style->getInnerMargin()) omogućuje spajanje svih pozicija objekata u niz pozicija.

Zatim možete napraviti usporedbu PHP nizova i odjednom: $check = strcmp ($margins1, $margins2) i provjeriti jesu li algoritam ili korisnik nešto promijenili (ili nisu). Ako usporedbu izvodite na uobičajeni način, morat ćete iterirati po elementima nizova. Ovo traje duže i izgleda glomaznije.

Objekti i nizovi

Još snažnija upotreba PHP-a (usporedba nizova) može se implementirati kroz objektno orijentirane ideje.

Moderna ideja objekata pretpostavlja da oni imaju svojstva i metode. Prvi su obično predstavljeni brojevima, nizovima, nizovima i drugim objektima. Potonji često uključuju metode za pisanje (put) u niz i vraćanje iz niza (get).

Za razliku od nizova, objekt djeluje prema vlastitim svojstvima i u interakciji je s drugim objektima. Objekt je "kompetentan" u tome koja njegova svojstva imaju stvarno značenje za algoritam, program kao cjelinu.

Ova točka daje osnovu i mogućnost da se pri snimanju u retku zabilježe samo potrebni podaci, a pri vraćanju iz retka vraćaju se sva radna svojstva u željeno stanje. Obično svaki objekt sadrži bitne i operativne (privremene) informacije. Implementacija ove ideje omogućuje vam uštedu ne samo memorije, prostora na disku i zapisa baze podataka, već također omogućuje usporedbu nizova pomoću jednostavnijih i preciznijih sredstava.

Sintaksa i semantika

PHP se dinamično razvija, a njegove funkcionalnosti, kako u smislu usporedbe stringova tako i u pogledu njihove obrade, stalno se poboljšavaju. Međutim, ništa ne sprječava programera da pomakne težište na područje semantike.

Funkcionalnost je nedvojbeno dobra, ali se njezina upotreba može prenijeti na semantički dio koda, na objekte. Kada se algoritam predstavi kao sustav interakcije objekata, izgleda mnogo bolje od niza usporedbi i radnji u ravnom sekvencijalnom, klasičnom stilu.



 


Čitati:



Kako staviti glazbu na poziv

Kako staviti glazbu na poziv

Dosadila vam je standardna melodija zvona na telefonu? Pročitajte naše upute i naučit ćete kako postaviti svoju omiljenu pjesmu na melodiju zvona vašeg Androida. Milijuni...

Android ažuriranje: kako ažurirati na novu verziju, vratiti?

Android ažuriranje: kako ažurirati na novu verziju, vratiti?

Ažuriranje operativnog sustava Android nije samo preporučljiv, već i nužan proces za stabilan rad pametnog telefona. Za vlasnika telefona...

Što učiniti ako se Nokia Lumia ne uključi?

Što učiniti ako se Nokia Lumia ne uključi?

Web stranica nokiaconnects.com 10 vrijednih savjeta koji će biti korisni za svakog korisnika Nokia Lumia pametnog telefona. Savjeti se temelje na...

Instaliranje službenog firmvera na Lenovo RocStar (A319) Lenovo treperi

Instaliranje službenog firmvera na Lenovo RocStar (A319) Lenovo treperi

Treperenje se koristi samo kao posljednje sredstvo, kada resetiranje postavki nije pomoglo da se uređaj vrati u normalan rad. Vrijedno je napomenuti da...

feed-image RSS