internetul Windows. Android

String funcții. Practica PHP: Compararea Row Compararea liniei PHP

Comparați liniile.

Sintaxă:

Int strcmp (str1 str1, str șir str2)

substr_compare ()

Seif pentru prelucrarea datelor în formularul binar comparație 2 linii cu deplasare, luând în considerare sau exclude registrul (PHP 5)

Descriere:

Int substr_compare (String Main_str, str șir str, int offset [, int lungime [, bool caz_sensitivity]])

substr_compare () compară șirul principal de la caracterul al cărui număr este setat de argumentul offset, cu str. Str. În comparație, au participat caracterele maxime de lungime.

Returnează numărul 0 dacă este mai mult str și 0 dacă liniile sunt egale. Dacă lungimea este mai mare sau egală cu lungimea Main_Str și Offset a trecut, substr_compare () afișează un avertisment și returnează false.

În cazul în care case_sensibilitatea este adevărată, se face comparația în ceea ce privește registrul.

Exemplu de utilizare a 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, adevărat); // 0.
echo substr_compare ("ABCDE", "BC", 1, 3); // unu
echo substr_compare ("ABCDE", "CD", 1, 2); // -unu
echo substr_compare ("ABCDE", "ABC", 5, 1); // Avertizare
?>

Comparați începutul rândurilor.
Sintaxă:

INT STRNCMP (Str. Str1, Str și str2, INT LEN)

Această caracteristică diferă de STFMP (), comparând tot cuvântul întreg cuvânt, ci primii octeți len. Dacă LEN este mai mică decât cea mai mică lungime a șirurilor, liniile sunt comparate în întregime.
Această caracteristică compară două linii în predominare (mai precis, Bobytovo) și returnări:

0 - dacă rândurile coincid complet;

1 - Dacă șir str1 lexicalic mai puțin decât str2;

1 - Dacă, dimpotrivă, str1 "mai" str2.

Deoarece comparația este peste bord, registrul de caz afectează rezultatele comparațiilor.

strcaSecmp.

Comparați liniile fără înregistrare.
Sintaxă:

INT STRCASSCMP (Str. Str1, str2 str2)

La fel ca și STRCMP (), numai atunci când lucrul nu este luat în considerare în cazul scrisorilor.

$ Str1 \u003d "hi!";
$ Str2 \u003d "hi!";
dacă (! STCESECMP ($ str1, $ str2))
Echo "$ str1 \u003d\u003d $ str2 atunci când compară liniile fără înregistrare";

strncasecmp.

Comparați începutul liniilor fără a vă înregistra.
Sintaxă:

INT STRNCASECMP (Str. Str1, String STR2, INT LEN)

Funcția STRNCASECMP () este o combinație de funcții STRSCAPPMP () ().

strnatcmp.

Produce o comparație "naturală" linii.
Sintaxă:

INT STRNATCMP (String Str1, String Str2)

Această caracteristică simulează o comparație de linii care ar folosi o persoană.

$ arr1 \u003d $ arr2 \u003d matrice ("img12.png", "img10.png", "img2.png", "img1.png");
echo "Sortare ordinară";
uSort ($ arr1, "strcmp");
print_r ($ arr1);
ecou "de preferat sortan";
uSort ($ arr2, "strnatcmp");
print_r ($ arr2);

Acest script va afișa următoarele:

Sortare obișnuită (
\u003d\u003e img1.png.
\u003d\u003e img10.png.
\u003d\u003e img12.png.
\u003d\u003e img2.png.
)

Sortare naturală (
\u003d\u003e img1.png.
\u003d\u003e img2.png.
\u003d\u003e img10.png.
\u003d\u003e img12.png.
)

strnatcacacmp.

Produce o comparație de linii "naturale" fără înregistrare.
Sintaxă:

INT STRNATCAPMP (String Str1, str2 str2)

La fel ca STRNATCMP (), ignoră numai registrul.

similară.

Determină similitudinea a două linii.
Sintaxă:

Int similar_text (string FIRSRT, string al doilea [, dublu procent])

Funcția similară () calculează similitudinea a două linii în funcție de algoritmul descris de Oliver (Oliver).
Dar, în loc de un stivă (ca într-un Oliver Pseudo-cod), utilizează apeluri recursive.
Complexitatea algoritmului face ca funcția să fie lentă, iar viteza sa este proporțională (n ^ 3), unde n este lungimea celui mai mare șir.
Funcția returnează numărul de caractere care au coincis în ambele linii. Când este transferat în funcție de cel de-al treilea parametru opțional, stochează procentajul de rânduri coincid.

levenshtein.

Determinarea diferenței în liniile stângi de două linii.
Sintaxă:

INT LEVENSHTEIN (Strol Str1, String Str2)
iNT LEVENSHTEIN (String Str1, str2 de str2, int cost_ins, int cost_rep, int cost_del)
iNT LEVENSHTEIN (Str. Str1, Str2, Costul funcției)

"Diferența de levenshtein" este chilo minim de caractere care ar trebui să înlocuiască, să introducă sau să se elimine pentru a roti șirul str1 în ST2. Complexitatea algoritmului este proporțională cu produsul lungimilor șirului str1 și str2, ceea ce face ca funcția să fie mai rapidă decât similară ().

Prima formă a funcției returnează numărul de operații necesare pe simbolurile șirului pentru a transforma str1 în str2.

Al doilea formular are trei parametri suplimentari: costul inserției, înlocuirii și funcționării de îndepărtare, ceea ce îl face mai adaptat pentru a calcula, dar în același timp mai puțin rapid. Indicatorul integral al complexității transformării este returnat.
A treia opțiune vă permite să specificați o funcție utilizată pentru a calcula complexitatea transformării.
Funcția de cost este numită cu următoarele argumente:

funcționarea aplicabilă (inserați, modificați, ștergeți): "I *" "R", "D";

simbolul real al primei linii

simbolul real al celei de-a doua linii

poziția rândului 1.

poziția rândului 2.

lungimea șirului rămas 1

lungimea șirului rămas 2

Funcția rezultată va trebui să returneze costul acestei operațiuni.
Dacă una dintre șirurile de mai mult de 255 de caractere, funcția LEVENSHTEIN () returnează -1,
dar această lungime este mai mult decât suficientă.

strgoll ()

Compararea rândurilor luând în considerare localizarea curentă (PHP 4\u003e \u003d 4,0,5, PHP 5)

Descriere:

Int strcoll (str1 str1, str2 str2)

Returnează un număr pozitiv dacă STR1 este mai mic decât str2; Numărul negativ dacă STR1 este mai mare decât str2 și 0 dacă liniile sunt egale. Strboll () În comparație, utilizează instalarea localei curente. Dacă este instalată localizarea C sau POSIX, această funcție este similară cu STRCMP ().

Rețineți că această caracteristică ia în considerare registrul de caractere și, spre deosebire de STRCMP (), nu este sigur pentru procesarea datelor în formă binară.

PHP nu este orientat rău să proceseze informații. Sintaxa limbii este reprezentată de un set complet de funcții de comparație, procesare a rândurilor, operatori de comparare.

Orice algoritm este o secvență de alegeri și acțiuni. Dar înainte de a alege, trebuie să comparați ceva cu ceva. Rândurile sunt cel mai capabil, eficient și practic mecanism pentru controlul algoritmului. Linii - versiunea reprezentării datelor. Iar datele sunt subiectul principal al "îngrijirii" oricărui algoritm.

Normal logică "comparație-acțiune"

În general, limba nu face diferențe speciale în date, de exemplu, pe PHP, o comparație și numere de linii nu sunt mult diferite. Numărul este, de asemenea, un șir când conține numai numere, un punct și nu există niciun simbol care nu este utilizat pentru a reprezenta numărul în orice formă (notație matematică).

În cazul rutării, numărul de automatizări se îmbină cu un șir fără întrebări și fără erori ascunse, chiar dacă funcția Gettype () oferă "întreg" sau "dublu".

Cu toate acestea, există o diferență între utilizarea funcției is_int () și is_numerică (). Primul dă adevărul atunci când parametrul este doar un număr întreg, al doilea, când orice număr sau șir numeric (variabila are tipul "șir", dar conține tot ceea ce este prevăzut de notația matematică).

Acest exemplu simplu este un eșantion bun, ca pe operatorii de comparare a layout PHP ("\u003d\u003d", "\u003d\u003d\u003d", "! \u003d", ...) pot da multe surprize. Variabilele pot schimba tipul lor, nu sunt întotdeauna numere, dar aproape întotdeauna pot fi aduse la șir. În cazuri extreme, acesta va fi un șir gol.

Pe baza celor de mai sus, funcțiile PHP ale comparației rând sunt cele mai populare. Ce anume alege, rezolvați dezvoltatorul. O mulțime de opțiuni sunt disponibile la expresii regulate.

Limitele funcționale disponibile

Comparația PHP a două linii este bună "face funcția" STPOS () - cea mai ieftină, credincioasă și practică opțiune. Dacă funcțiile funcției, atunci o singură linie fără echivoc este diferită sau una intră pe cealaltă.

Cu atenție opus, dar și o abordare absolut dreaptă este utilizarea de expresii regulate.

Dacă apelul la funcția $ crezult \u003d SCCheckFileName ($ CSTR) va da "adevărat", înseamnă că șirul este numele fișierului Vords. El va avea o singură opțiune de extensie ".docx" și nici caractere în nume: numai litere, numere și semne "_", "-".

Funcția poate fi ușor convertită în alte tipuri de fișiere: $ cptr \u003d "/ ^ ((4,239))) (HTML | JS | CSS | PNG | JPG | Docx | TXT) (1) $ / U". Această opțiune Verificarea șirului este extinderea gamei de descărcare (de exemplu, la compararea PHP Stroke "pentru a descărca fișiere pe un server, fără o singură șansă de eroare de intrare") pe HTML, JS, CSS, ...

Folosind stropi () și preg_match () - extreme. Ei nu au o relație directă cu problema comparației. Dar, la urma urmei, problema algoritmului este o chestiune de aplicare a unei combinații de stiluri, utilizarea tuturor oportunităților de a obține un rezultat fiabil și corect.

Funcționalitate PHP: compararea liniilor

Limba arsenală în comparație cu liniile nu este doar funcțiile de comparație pură, ci și o combinație cu o căutare sau înlocuire direct. Nu întotdeauna acțiunea ar trebui să coincidă cu comparația, deoarece aceasta din urmă nu duce neapărat la o schimbare în niciun șir. Adesea, trebuie să alegeți una sau o altă ramură a algoritmului.

Opțiunea obișnuită PHP: Comparația rândului oferă funcția INT STR STRCMP (S1, S2).

Rezultat Funcția:

  • 0 - linii sunt egale;
  • -1 - prima linie este mai mică decât cea de-a doua;
  • 1 - Prima linie este mai mare decât cea de-a doua.

În practică, aceasta înseamnă că prima linie este inclusă în al doilea, din care funcția PHP (compararea liniilor) decide. O versiune mai limitată de STPO (), deoarece în ultimul caz puteți cunoaște poziția de intrare.

Funcția STCMP () este dependentă de caz și dependentă. Dacă aveți nevoie să comparați liniile fără a lua în considerare registrul de simbol, PHP oferă pentru a utiliza STRSSECMP (). Sintaxa este similară.

În practică, este adesea necesar să lucrăm cu tot șirul, ci numai cu partea sa. Pentru a face acest lucru, într-un set de funcții PHP (comparație linii) include STRNCMP (S1, S2, N). Al treilea parametru indică compararea numai a n-octet. Rezultatul este similar cu STRCMP ().

Arrays, rânduri și comparație

Datele sunt aproape întotdeauna reprezentate de linii. Dacă luăm în considerare matrice, obiecte sau structuri de informații, atunci acestea sunt pur și simplu diferite opțiuni pentru o combinație de structuri mai simple de șir.

Arrays și linii de șir pot fi prezentate cu un mod complementar. Transformarea matricei în șirul funcției Impulde (matrice, simbol), de exemplu: $ margins1 \u003d implode ("," $ stil-\u003e getinnerrmargin ()); ... algoritmul de lucru / utilizator ...; $ margins2 \u003d implode (",", $ stil-\u003e getinnerrmargin () vă permite să scurgeți toate obiectele obiectului în șirul de poziție.

Apoi, puteți efectua o comparație PHP a șirurilor și la un moment dat: $ check \u003d Strcmp ($ margini1, $ margins2) și asigurați-vă că algoritmul sau utilizatorul a schimbat ceva (sau nu). Dacă comparați modul obișnuit, va trebui să rezolvați elementele matricei. Se întâmplă mai mult și arată mai greoaie.

Obiecte și stringuri

Utilizarea și mai spectaculoasă a PHP (compararea liniilor) poate fi implementată prin idei orientate pe obiecte.

O idee modernă de obiecte implică prezența proprietăților și a metodelor. Primul este, de obicei, reprezentat de numere, linii, matrice și alte obiecte. Cea de-a doua adesea include metode de înregistrare (puse) în șirul și recuperarea de la șir (obțineți).

Spre deosebire de matrice, obiectul efectuează lucrul cu proprietățile sale și interacționează cu alte obiecte. Obiectul "competent" în care proprietățile sale sunt de valoare reală pentru algoritm, programul în ansamblu.

Acest moment oferă baza și capacitatea de a înregistra numai informațiile necesare în timpul înregistrării și când se recuperează din șir, restaurați toate proprietățile de funcționare în starea dorită. De obicei, în orice obiect există informații esențiale și de lucru (temporare). Implementarea unei astfel de idei vă permite să salvați nu numai memoria, spațiul pe disc, intrarea bazei de date, dar, de asemenea, face posibilă compararea șirurilor de caractere mai simple și mai exacte.

Sintaxă și semantică

PHP se dezvoltă dinamic, iar funcționalitatea acestuia atât în \u200b\u200bceea ce privește compararea rândurilor și în raport cu prelucrarea acestora, este în mod constant îmbunătățită. Cu toate acestea, nimic nu împiedică dezvoltatorul să transfere centrul de greutate în zona de semantică.

Fără îndoială, funcționalitatea este bună, dar utilizarea sa poate fi transferată în partea semantică a codului în obiecte. Când algoritmul este reprezentat ca un sistem de interacțiune a obiectelor, acesta arată semnificativ mai bun decât secvența de comparații și acțiuni într-un stil secvențial, clasic direct.

Acest capitol descrie operatorii de comparare. Acești operatori verifică egalitatea (cum ar fi egală, mai puțin egală, etc.) între cele două valori și returnează adevărate sau false, în funcție de modul în care operanii sunt corelați. Operatorii de comparație returnează întotdeauna valorile logice, iar aceste valori sunt cel mai adesea utilizate în operatori, cum ar fi, în timp ce sau pentru a controla execuția programului.

Comparația operatorilor
ExempluNumeRezultat
$ i \u003d\u003d $ yIn aceeasi masuraAdevărat dacă $ I este $ y după conversia tipurilor de date.
$ i \u003d\u003d\u003d $ yIdenticAdevărat dacă $ i este $ y și are același tip de date.
$ i! \u003d $ yNu este egal
$ I.<> $ y.Nu este egalAdevărat dacă $ i nu este $ y după conversia tipurilor de date.
$ i! \u003d\u003d $ YNu este identicAdevărat dacă $ I nu sunt $ y sau sunt diferite tipuri.
$ I.< $y Mai puținAdevărat dacă $ i este strict mai mic decât $ y.
$ i\u003e $ yMai multAdevărat dacă $ sunt strict mai mult $ y.
$ I.<= $y Mai puțin sau egalAdevărat dacă $ i este mai mic sau egal cu $ y.
$ i\u003e \u003d $ yMai mult sau egalAdevărat dacă $ i este mai mare sau egal cu $ y.

Notă: Dacă încercați să afișați rezultatul funcționării comparației pe ecran, valoarea TRUE va fi afișată în fereastra browserului ca 1. Valoarea falsă corespunde numărului 0 și nu este afișat pe ecran (în principiu, ar trebui să vă amintiți de la descrierea tipului boolean). Dacă doriți să vedeți rezultatul sub formă de adevărat sau fals, utilizați funcția Var_dump ().

De asemenea, merită remarcat: Dacă un șir este comparat cu un număr sau două linii care conțin numere, fiecare șir va fi convertit în număr și vor fi comparate ca numere.

Operator \u003d\u003d (egalitate)

Operatorul \u003d\u003d (egalitate) acceptă operanții de orice tip, dacă doi operanzi sunt egali, se întoarce la adevărat, altfel fals.

Dacă operanzii au diferite tipuri de date, PHP va încerca să le convertească înainte de a compara cu un tip, de exemplu, o astfel de expresie "4" \u003d\u003d 4 va reveni la adevărat, deoarece PHP va duce automat la valori comparabile la unul Tip de date. În mod similar, expresia $ a \u003d\u003d 1 va reveni la adevărat dacă variabila $ A conține o valoare 1. Dacă doriți să evitați conversia de tip implicită în comparație, atunci operatorul de identitate trebuie utilizat pentru a fi considerat în continuare.

Operator \u003d\u003d\u003d (Identitate)

Operatorul \u003d\u003d\u003d (identitate) ia operanii de orice tip și returnează adevărații dacă valorile lor se potrivesc (egale) și false, dacă sunt diferite. Ce este diferit de operatorul de egalitate? Operatorul de identitate verifică două operande pe "identitate", ghidată de definiția strictă a coincidenței, aceasta înseamnă că, pe lângă egalitatea valorilor operandului, acestea ar trebui, de asemenea, să se refere la același tip de date. De exemplu, considerăm o astfel de expresie ca 5 \u003d\u003d\u003d "5", rezultatul acestei expresii va fi valoarea falsă, deoarece valoarea stângii este un număr, iar valoarea spre dreapta este un șir, Adică, aceste valori au diferite tipuri de date. Amintiți-vă că operatorii \u003d\u003d și \u003d\u003d\u003d înseamnă "egal" și "identic / identic egal".

Operator! \u003d Sau<> (inegalități)

Inegalitatea operatorului Are două tipuri:! \u003d Și<> . Este opusul operatorului \u003d\u003d și returnează adevărat, dacă valorile operandului nu sunt egale. Operatorul de inegalitate returnează fals numai dacă valorile de pe ambele părți sunt egale unul cu celălalt.

$ var2); // întoarcere false var_dump ("acasă"<> "ACASĂ"); // păstrați adevărat?

Operator! \u003d\u003d (non-identitate)

Operatorul! \u003d\u003d (non-identitate) efectuează o inspecție, exact operatorul opus \u003d\u003d\u003d. Returnează adevărat dacă valorile operandului nu sunt egale între ele sau nu să se refere la același tip de date. De exemplu, luați în considerare următoarea expresie: 7! \u003d\u003d "7", operatorul "non-identitate" se va întoarce adevărat, deoarece valoarea stângii este un număr și valoarea la linia dreaptă, adică Consultați diferite tipuri de date. De aici va fi ușor să vă amintiți că operatorii! \u003d Și! \u003d\u003d înseamnă "nu egală" și "nu este identic / identic în mod egal".

Operator\u003e (mai mult)

Când utilizați operatorul\u003e (mai mult), comparația returnează numai dacă valoarea din stânga operatorului este mai mare decât valoarea din dreapta. Ca și alți operatori, operatorul\u003e funcționează nu numai cu valori numerice, ci și cu șir. Dar cum poate fi o linie mai diferită?

Când lucrați cu linii de scrisoare în litere mici, mai multe litere în majuscule. Când comparând șirurile PHP, verificați mai întâi prima literă a liniei la nepotrivire. Dacă diferența nu este detectată, există o tranziție la următorul caracter etc., până când diferența se găsește sau se va ajunge la sfârșitul liniei. Dacă două valori cu fiecare parte a operatorului\u003e vor fi egale, operatorul va returna, de asemenea, FALSE.

3); // retur TRUE var_dump ("hi"\u003e "hi"); // va returna falsul var_dump (1\u003e 1); // reține fals?\u003e

Operator< (меньше)

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

Operator\u003e \u003d (mai mult sau egal)

Operator\u003e \u003d ( mai mult sau egal) Ușor diferit de cei care operatori, care au fost considerați mai devreme. Acesta adaugă posibilitatea egalității a două valori pe ambele părți ale acesteia, adică să se întoarcă adevărată, valoarea spre stânga operatorului trebuie să fie mai mare sau egală cu dreptul la acesta. Operatorul "mai mare sau egal" returnează fals numai dacă valoarea din stânga este mai mică decât valoarea dreptului.

\u003d 5); // adevărat var_dump se va întoarce ("hi"\u003e \u003d "hi"); // întoarcere adevărat var_dump (1\u003e \u003d 2); // reține fals?\u003e

Operator<= (mai puțin sau egal)

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