Substituirea PHP a variabilelor în șir. Folosind șabloane în PHP. Caracteristici pentru lucrul cu codul HTML

Valorile șirului sunt șiruri de text (scurt rând). Un șir este o secvență de zero sau mai multe caractere. Simbolurile includ litere, numere, semne de punctuație, simboluri speciale și lacune.

Șirul poate fi definit de patru căi diferite:

  • citate duble
  • citate unice
  • heredoc-sintaxă
  • sintaxa Nowdoc.

Rând în citate dublu

Linie în ghilimele duble:

Secvențele de control pot fi utilizate în linii cu ghilimele Dual. Secvența de control - Acestea sunt personaje speciale concepute pentru a forma ieșirea textuală. Următoarele secvențe de control sunt disponibile în PHP:

Proprietatea principală a liniilor din ghilimele duble este capacitatea de a procesa variabilele în interiorul rândurilor.


Dolar semn: \\ $ ";

Rândurile încheiate în ghilimele duble pot conține caractere de citate unice:

Echo "citate unică:" ";

Rând în citate unice (apostrofe)

Șir în citate simple:

$ str \u003d "șir"; Echo "O linie mare poate fi ruptă în mai multe linii mici, astfel încât este mai convenabil să citești.";

Spre deosebire de linii din ghilimele duale și sintaxa de heredoc, variabilele și secvențele de control (pentru o singură excepție), închise în citate unice nu sunt procesate. Aceasta înseamnă că acestea vor fi interpretate ca caractere convenționale de șir:

$ num \u003d 10; ECHO "Număr: $ num
Dolar semn: \\ $ ";

La linia închisă în ghilimele unice, se poate folosi citate unice, trebuie să fiți protejați folosind o slash inversă (\\ "). Dacă trebuie să scrieți linia oblică inversă, trebuie să-l duplicați (\\\\):

Echo "Inside sunt folosite \\" Citate "Single \\" "; Echo "Slash inversă: \\\\";

Rândurile încheiate în ghilimele unice pot conține caractere de ghilimele duale:

Echo "Citate duble:" ";

Heredoc-sintaxă

Heredoc-sintaxă este mod alternativ Șir de înregistrări.

Șirul determinat utilizând sintaxa Heredoc funcționează, precum și un șir localizat în ghilimele duble. Diferența dintre Heredoc și un rând în citate dublă este aceea că utilizarea Heredoc nu este nevoie să vă protejați ghilimele.

Heredoc-sintaxă începe cu trei caractere<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Imediat După identificator, traducerea trebuie transferată într-un șir nou, fără alte caractere în plus față de traducerea la un șir nou după ce identificatorul nu trebuie să fie, altfel se va produce o eroare. Apoi, merge direct la conținut de șir. După conținuturile de șir, pe o linie separată, trebuie să fie specificator de închidere (la fel ca după<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

Nowdoc-sintaxă

Nowdoc-sintaxa, precum și Heredoc este o modalitate alternativă de înregistrare a rândurilor.

Șirul determinat utilizând Sydoc Syntax funcționează, precum și un șir localizat în ghilimele unice. Diferența dintre Nowdoc și un șir în citate unice este aceea că utilizarea Nowdoc nu este nevoie să protejați citatele unice.

Sintaxa Nowdoc este similară cu Heredoc cu diferența că identificatorul de deschidere trebuie să fie în mod necesar închis în citate unice:

$ num \u003d 10; Ecou.<<<"some_id" Число: $num some_id;

Variabilele de procesare în linii

Există două tipuri de sintaxă de procesare variabilă în linii: simplu și complicat.

Sintaxă simplă - Acesta este momentul în care numele variabilei este specificat în șir așa cum este.

Când interpretul îndeplinește semnul dolarului, începe să verifice secvențial dacă toate caracterele ulterioare sunt caractere valide în numele variabilei. Astfel, pentru a forma numele variabilei corecte, ea captează atât de multe personaje cât mai mult posibil:

$ Str \u003d "lume!"; Echo "Hello $ str";

Sintaxă complexă - Acesta este momentul în care numele variabilei se află în paranteze curbate.

Deoarece, pentru prelucrarea unei variabile într-un șir, interpretul captează atât de multe personaje cât mai mult posibil atunci când interpretul nu poate determina independent unde se termină numele variabilei:

$ Sport1 \u003d "Will"; $ Sport2 \u003d "picior"; Echo "Îmi place $ sport1ball și $ sport2ball";

În acest caz, rezultatul dorit nu va fi atins, deoarece interpretul va număra $ Sport1 ca parte a numelui variabilei $ Sport1ball, care nu există.

Pentru a specifica în mod explicit un interpret în care se încheie numele variabilei, este necesar să introduceți numele variabilei în parantezele curbate:

$ Sport1 \u003d "Will"; $ Sport2 \u003d "picior"; Echo "Îmi place ($ Sport1) Bol și ($ Sport2) Bol".

Semnul dolarului poate fi amplasat atât în \u200b\u200bfața bretele, cât și după aceasta:

$ Sport1 \u003d "Will"; $ Sport2 \u003d "picior"; Echo "Îmi place $ (Sport1) Bol și ($ Sport2) Bol";

Concatenare

Concatenarea este o combinație de două sau mai multe rânduri într-una mare. Combinația are loc utilizând un operator de concatenare -. (punct). Atunci când concatenarea, fiecare șir ulterior este adăugat la sfârșitul celui anterior:

Valoarea oricărui tip care este combinată cu șirul va fi implicit transformată în șir și apoi se va face concatenarea:

", Echo" Număr: ". 1;?\u003e

Recent, discuția de limbă PHP pe Habré este redusă la capacitatea de a proiecta sisteme complexe care nu pot decât să se bucure. Cu toate acestea, după revizuirea cu o duzină de cadre web cele mai recunoscute (Zend Framework, Adept, CakePHP, Codeignire, Limba, Symfony, MZZ și altele), am descoperit cu sinceritate în unele deficiențe semnificative din punct de vedere al optimizării elementare.

Pentru ca acest subiect să fie mai orientat tehnic, rezultatele sunt decorate într-o formă mai strictă, care poate fi oarecum complicată de percepție.

Deci, am mers ... sarcina este extrem de simplă: experimente la rata de formare a liniilor de la un substring în citate simple și duble. În principiu, această problemă va fi relevantă pentru o lungă perioadă de timp datorită caracteristicilor procesării rândului în PHP.

Există multe articole despre optimizarea de bază a scripturilor atât în \u200b\u200blimbile rusă, cât și în alte limbi. Liniile spun că există puțin, dar există un fapt de "parsare" de rânduri în citate dublu pentru variabile și caractere de control (fostul, ca în documentația oficială). Pe baza acestui fapt, este logic să presupunem că utilizarea rândurilor în citate dublu în lucrare va fi oarecum mai lentă decât aceleași operații cu substanță în citate unică.

În plus față de substituirea variabilelor în corzi și concatenarea variabilelor cu substraturi, acesta este încă implementat cel puțin o modalitate de formare a corzilor: Lucrul cu funcția Sprintf. Este logic să presupunem că această metodă va renunța semnificativ la "standardul" datorită funcției inutile a funcției și despărțirii șirului din interior.

Singura adăugare, înainte de a vă prezenta codul scriptului de testare: trebuie să luați în considerare 2 opțiuni posibile pentru a lucra cu ghilimele duale: luând în considerare stilul de codare simplu și "avansat". Faptul că variabilele sunt la începutul liniilor de a acorda atenție nu ar trebui să fie, probabil că sunt doar exemple:
$ string \u003d "$ _server [" http_host "] - nu administrarea regiunii Ulyanovsk. Ne iubim limba rusă și nu iubim pe cei care ..."
și
$ string \u003d "($ _Server [http_host"]) - nu administrarea regiunii Ulyanovsk. Ne iubim limba rusă și nu iubim pe cei care ... "

Testul numărul unu.
Ei bine, se pare că toate rezervările sunt făcute - este timpul să arătăm rezultatele lucrării. Codul sursă al testerului poate fi găsit.

Potrivit capturilor de ecran, este clar că ipoteza mea nu a fost confirmată. Singurul motiv credincios a fost presupunerea de a lucra cu rânduri prin sprintf. Cele mai rapide caracteristici care funcționează cu precizie cu ghilimele duble.

După o scurtă gândire a situației, explicația a venit de la sine: faptul că șirul de referință în care au fost făcute substituțiile sunt prea scurte: trecerea parserului pentru o astfel de linie este afacerea. Cu toate acestea, chiar și aici se poate observa că substituirea nativă a variabilei în șir dă un avantaj față de "stil avansat".
În aceeași slăbiciune a abordării de concatenare: volumele de date introduse depășesc volumul substringului. De unde provin cheltuielile generale, puteți citi în habratopul deja menționat.

Cu toate acestea, chiar și aceste gânduri necesare pentru a confirma. Pentru a face acest lucru, a luat al doilea test cu schimbări în cele mai importante motive atât de imprevizibile (pentru mine). Aparent, foarte răsucite în cea de-a cincea versiune (Mărturisesc, în cea de-a cincea versiune a PHP am petrecut doar 1 test: să ocolească elementele de matrice).

Testați numărul doi.
Cea de-a doua ipoteză: Extinderea șirului de referință va crește în cele din urmă procentajul din timpul de funcționare al testerelor asociate cu formarea de rânduri în citate dublu, în raport cu rezultatele numărului de testare 1. aceeași situație, teoretic, ar trebui să fie observate în ceea ce privește funcționarea funcției Sprintf. Acest lucru se datorează, în primul rând, cu nevoia de parsare a rândului și o creștere a timpului petrecut în acest sens. Într-o situație cu concatenare a unui substring în citate unice, cred că va fi aproximativ același rezultat ca în primul test, care va oferi o ușoară scădere a ponderii funcției citatelor de funcții_3 () până la momentul funcționarea întregului script (dar nu o creștere a performanței).

Concluzii, de fapt, pozitive și confirmând ipoteza. Cu o creștere minoră a liniei de referință, apare o sarcină mare, ceea ce duce la o scădere a vitezei funcțiilor de lucru cu citate duale și sprintf.

Presupunerea față de liniile în citate unice a fost, de asemenea, adevărată: în loc de 36,75% din timpul în primul test, în cea de-a doua funcție citate_3 () clasat la 33,76% din timpul de execuție a scriptului

Valoare practică.
În limbajul simplu, abstractând din date, putem concluziona: cu cât este mai mult linia în care este necesar să se înlocuiască, cu atât este mai mare probabilitatea ca funcționarea concontină să fie mai rapidă decât căutarea unei variabile în ghilimele duble. Voluntarii pot încerca să selecteze parametrii de introducere necesari (numărul de variabile, lungimea rândului de referință, lungimea rândurilor în variabile), astfel încât acestea să satisfacă egalitatea timpului de execuție.

Aici, de fapt, toate. Rămâne doar pentru a adăuga că nu se întâmplă în programare (acest lucru este iubitorii de a spune "Salvarea pe meciuri" (C) AELF). Cunoașterea unor astfel de subtilități și luarea lor în considerare, puteți scrie codul care va fi optimizat la toate nivelurile sale;)

PS:
Testele au fost efectuate utilizând Zend Studio pentru Eclipse 6.0.0 (Debugger + profiler inclus).
PHP 5.2.5 Versiunea
Debian Linux OS.

PPS:
Mă voi bucura dacă cineva își prezintă rezultatele testului. Cred că acest lucru va face posibilă elaborarea mai obiectivă a unei evaluări a necesității de a utiliza cealaltă metodă de substituție în șir. De asemenea, voi aprecia critica sănătoasă a stilului de prezentare și design.

Desigur, imagini, fișiere de sunet, informații video, date de animație și applets constituie o parte importantă a conținutului World Wide Web, dar partea copleșitoare a datelor în web este încă prezentată sub formă de secvențe de text - simboluri similare cu acest lucru oferi. Principalul tip de date PHP destinate prezentării textului este un șir.

Descrierea rândului în PHP

Rândurile sunt o secvență de caractere care pot fi considerate ca un număr întreg - pentru a fi atribuite variabilelor, transmise ca intrare la funcție, reveniți din funcții sau mergeți ca ieșire pentru a afișa pe pagina web a utilizatorului. Cea mai simplă modalitate de a seta un șir în codul PHP este de a încheia secvența de caractere în citate, unică (") sau dublu ("), de exemplu, după cum urmează:

$ Mystring \u003d "Singur simplu"; $ Anotorstring \u003d "o altă linie";

Diferența dintre citatele unice și duble se datorează modului în care interpretarea intensivă sunt expuse în simbolurile de mediu PHP închise în citate, înainte de a crea rândul în sine. Dacă șirul este închis în ghilimele unice, atunci aproape nici o interpretare nu se efectuează și dacă șirul este închis în ghilimele duble, în mediul PHP, sunt enumerate valorile tuturor variabilelor, care sunt enumerate în linie și Înlocuirea unor secvențe speciale de caractere care încep cu linia de panglică inversă simbolică ().

De exemplu, după prelucrarea următorului cod inclus în pagina web:

$ Număr \u003d 13; $ string1 \u003d "într-un șir \\" salut, lume! \\ "numără caractere.
"$ string2 \u003d" într-un șir \\ "salut, lume! \\" $ numără caractere.
"; Echo $ string1; Echo $ string2;

puteți conta pe obținerea în fereastra browserului acestei ieșiri:

Valorile încântătoare folosind paranteze Curly

În majoritatea situațiilor, puteți pur și simplu să porniți variabila la șirul de citate dublă, iar valoarea variabilă va fi înlocuită în șir în timpul procesării rândului de către interpret. Dar în cele două situații descrise mai jos, este posibil ca interpretul de rând să nu adopte o soluție rezonabilă și necesită instrucțiuni suplimentare de la dezvoltator.

Prima situație este că interpretul nu poate determina unde se termină numele variabilei, iar a doua situație apare atunci când este necesar să se înlocuiască în string nu valoarea unei variabile simple, ci valoarea expresiei. În aceste cazuri, dezvoltatorul poate face claritate prin intrarea într-un nume sau expresie care trebuie tratată în paranteze curată (()).

De exemplu, interpretul PHP nu are dificultăți în procesarea următorului cod:

$ Sport \u003d "volei"; $ PLAY \u003d "Îmi place să joc $ sport". ";

În astfel de cazuri, interpretul detectează simbolul $, după care începe să colecteze simboluri în substring pentru a detecta numele variabilei și efectuează un astfel de ansamblu până când spațiul sau punctul se va constata că este urmată variabila $ sport. Spațiile și punctele nu pot face parte din numele variabilei, prin urmare, devine clar că variabila în cauză are numele $ sport; După aceasta, interpretul PHP găsește cu succes o valoare pentru această variabilă ("volei") și o înlocuiește.

Dar, uneori, nu există posibilitatea de a desemna sfârșitul numelui variabil folosind un spațiu sau un punct. Luați în considerare următorul exemplu:

$ Sport1 \u003d "Will"; $ Sport2 \u003d "picior"; $ Sport 3 \u003d "coș"; // modele greșite $ play1 \u003d "Îmi place să joc $ sport1ball."; $ Play2 \u003d "Îmi place să joc $ sport2bol". $ Play3 \u003d "Îmi place să joc $ sport3ball.";

În acest caz, efectul dorit nu va fi atins, deoarece interpretul PHP va lua în considerare șirul $ Sport1 ca parte a numelui variabilei SPORT1B, care, aparent, nu este atribuit niciunei valori. În schimb, este necesar să se aplice o astfel de intrare:

// Design Corect $ Play1 \u003d "Îmi place să joc ($ sport1) bol". $ Play2 \u003d "Îmi place să joc în ($ sport2) bol". $ Play3 \u003d "Îmi place să joc ($ sport3) bol".

Această intrare servește la interpretul PHP la indicarea că numai valoarea expresiei cu numele variabilei închise în bretele curl trebuie să fie calculată înainte de valori.

Din motive similare, interpreturile PHP, dacă nu sunt utilizate bretele curbate, întâmpină dificultăți în substituirea valorilor expresiilor complexe cu nume variabile, cum ar fi apelurile la elementele de matrice multidimensionale și la variabilele obiectului. Regula generală este că, dacă un suport deschis (() trebuie să urmeze direct brațul deschis ((), interpretul PHP calculează valoarea expresiei cu numele variabilei până la brațul de închidere ()) și apoi înlocuiește Valoarea rezultată în șir. (Dacă este necesar ca valoarea literală să apară în linie ($, poate fi asigurată prin punerea unui aliment înainte de fiecare dintre aceste caractere, \\).

Simboluri și indici de simboluri în linii

Spre deosebire de alte limbi de programare din PHP, nu există nici un tip simbolic separat care nu se potrivește cu tipul de șir. În general, funcțiile care necesită în alte limbi pentru a utiliza parametrii actuali simbolici, în limba PHP sunt concepute pentru a obține rânduri cu lungimea 1.

Selectarea caracterelor individuale din șir poate fi efectuată prin specificarea numărului de secvență al caracterului pornind de la zero, care trebuie specificat în paranteze curbate direct în spatele numelui variabilei șirului. Astfel de simboluri reprezintă de fapt linii cu un singur pulverizare. De exemplu, executarea următorului cod:

$ Mystring \u003d "dublat"; pentru ($ index \u003d 0; $ index< strlen($myString); $index++) { $char = $myString{$index}; print("$char$char"); }

duce la o fereastră de browser a acestei ieșiri din fereastra browserului:

Evident, de fiecare dată când ciclul trece, fiecare simbol de șir este afișat de două ori. Funcția Strlen () returnează lungimea șirului.

Operațiuni cu șiruri de caractere

Două operațiuni de șir sunt furnizate în PHP: Funcționarea cu un punct de operare (.) Sau o operație de concatenare și o operație cu un punct de semnalizare și un semn de egalitate (. \u003d) Sau o operație de concatenare și de atribuire. Luați în considerare următorul exemplu:

$ string1 \u003d "Aceasta este o parte"; $ string2 \u003d "linii"; // Confectează șirurile ECHO $ \u200b\u200bString1 "Simple". $ String2. "
"//" această parte a unei linii simple "// concatenare și atribuire $ string1. \u003d" Simplu "; // echivalent cu $ string1 \u003d $ string1." Simplu "; $ string1. \u003d $ String2; echo $ string1; //" Aceasta face parte dintr-o linie simplă "

Trebuie remarcat faptul că, în exemplul de mai sus, primul operator de ecou nu este transmis în mai multe parametri actuali șir; Numai un parametru real al șirului este transmis, creat ca urmare a unei concatenarea a patru linii. Prima și a treia linie sunt setate folosind variabile, iar a doua și a patra linii sunt o linie literală închisă în ghilimele duble.

Structura sintactică a documentului atașat (Heredoc)

În plus față de structurile sintactice ale șirurilor în ghilimele unice și duble, în limba PHP există o altă modalitate de a specifica un șir numit structura sintactică a documentului atașat (Heredoc). Așa cum sa dovedit, o structură sintactică similară este un instrument foarte convenabil pentru stabilirea fragmentelor de text mari substituite cu variabile, deoarece utilizatorul va scăpa de necesitatea de a desemna citate interne folosind caractere speciale. Această metodă este deosebit de convenabilă atunci când creați pagini care conțin forme HTML.

Funcționarea operațiunii utilizate în structura sintactică a documentului atașat este (<<<). За этим знаком должна непосредственно следовать метка (не заключенная в кавычки), которая обозначает начало многострочного текста. Интерпретатор PHP продолжает включать в состав значения переменной следующие строки до тех пор, пока снова не появится эта же метка в начале строки. За заключительной меткой может следовать необязательная точка с запятой, а какие-либо другие символы после метки не допускаются.

Luați în considerare următorul exemplu:

$ String \u003d.<<

Eot; ECHO $ \u200b\u200bstring;

Rețineți că cuvântul eot final prezentat mai sus nu ar trebui să fie notat de indentare, altfel va fi considerat ca aparținând textului inclus suplimentar. Ca o etichetă, nu este necesar să se utilizeze cuvântul "eot", eticheta poate avea orice nume care să corespundă regulilor obișnuite pentru numirea variabilelor în limba PHP.

Substituția valorilor variabile se efectuează folosind exact aceeași metodă ca și atunci când se utilizează linii închise în ghilimele duble. O caracteristică convenabilă a documentului atașat este că textul indicat în acest mod puteți introduce semne de ghilimele fără utilizarea oricăror caractere de control și acest lucru nu duce la o finalizare prematură a formării șirului. Exemplul prezentat mai sus afișează cea mai simplă formă HTML:

String Funcții

Limba PHP oferă un număr mare de funcții diverse pentru procesarea și transformarea corzilor. Dacă aveți vreodată nevoie de a vă crea propria funcție care citește și procesează simbolul șirurilor din spatele simbolului pentru a forma o nouă linie, gândiți mai întâi dacă sarcina similară ar putea apărea înainte de oricine înainte. Și dacă intuiția sugerează că există o astfel de probabilitate, atunci poate avea și o funcție încorporată care rezolvă sarcina. Pentru mai multe informații despre funcțiile de șir, contactați https://php.net/manual/ru/ref.strings.php.

Această secțiune prezintă funcțiile de bază pentru verificarea, compararea, modificarea și ieftinul. Pentru a stăpâni cu adevărat mijloacele de manipulare a limbajelor PHP, se pare că are cel puțin o cunoaștere rapidă cu tot ceea ce este descris în această secțiune. O descriere a caracteristicilor concepute pentru a lucra cu expresii regulate poate fi găsită în următorul articol.

Verificarea șirului

Ce întrebări cu privire la liniile trebuie să caute cel mai adesea un răspuns? Primul din lista de întrebări este întrebarea a ceea ce este un șir; Pentru a răspunde la acesta, funcția Strlen () este utilizată, numele căruia este o reducere de la lungimea șirului - lungimea șirului. Un exemplu de aplicare a unei astfel de funcții este mai jos:

$ Enstr \u003d "salut lume!"; $ russtr \u003d "Singure Singure"; ECHO $ \u200b\u200bENSTR. "-" ".Strlen ($ ENSTR)." Simboluri
", Echo $ Russtr." - ".Strlen ($ RUSSTR)." caractere ";

Executarea acestui cod are ca rezultat următoarea ieșire ambiguă:

După cum puteți vedea, pentru șirul "Bună ziua!" Rezultatul a fost corect, dar pentru șirul "rând simplu" rezultă în 27 de caractere este incorectă. Ce este cazul? Faptul este că funcția Strlen () consideră octeți și nu simboluri. În primul caz, toate caracterele din șir sunt engleze, adică. Prezentat de codificarea ASCII și sunt codificate de 1 octet. În al doilea caz, linia are caractere rusești care sunt codificate de 2 octeți (UTF-8). Pentru a evita problemele în viitor atunci când lucrați cu funcții de șir, în PHP, utilizați funcții pentru codificări multibyte începând cu prefixul MB_. Aceasta înseamnă că, în exemplul anterior, este necesar să se înlocuiască funcția strlen () pe MB_Strlen () și să specifice în mod explicit codificarea:

Echo $ rus_str. "-" .b_strlen ($ RUS_STR, "UTF8"). "Simboluri";

Căutați simboluri și substring

Următoarea întrebare referitoare la liniile este aceea că acestea conțin. De exemplu, funcția STPOS () vă permite să găsiți numărul de poziție al unui caracter specific în șir, dacă este cazul:

$ Enstr \u003d "salut lume!"; ECHO "Simbol" L ":" ".Strpos ($ ENSTR," L "); // 2.

Situațiile legate de utilizarea funcției STPOS () aparțin acelor cazuri în care imunitatea limbajului PHP la tipuri poate deveni o sursă de probleme. Dacă se găsește meciul, funcția returnează o valoare falsă și dacă simbolul dorit coincide cu primul caracter din șir, funcția revine 0 (deoarece numărătoarea inversă a pozițiilor de caractere din rând începe cu 0 și nu 1). Ambele valori corespund valorii false atunci când sunt utilizate pentru a verifica starea logică. Una dintre modalitățile de a distinge între aceste valori este de a aplica o operație de comparare a identității (operație \u003d\u003d\u003d, introdusă din versiunea PHP4), care returnează o valoare reală numai dacă operanii săi sunt aceiași și se referă la același tip. Operațiunea de comparație pentru identitate poate fi utilizată pentru a verifica dacă valoarea returnată este 0 (sau are o valoare falsă), fără risc, confuzând valoarea de returnare cu alte valori care pot deveni aceleași cu ea după aducerea tipului.

Caracteristica STPOS () poate fi, de asemenea, utilizată pentru a căuta un substring și nu un singur simbol. Pentru a face acest lucru, este suficient să setați ca un amestec multi-amestec dorit și nu un șir scurt. În plus, în apelul acestei funcții, puteți specifica un parametru suplimentar integer care indică poziția de pornire a căutării.

De asemenea, puteți căuta în direcția opusă, de la capătul șirului la început. Pentru a face acest lucru, utilizați funcția StrRpos (). (Rețineți că, în numele acestei funcții, există o literă suplimentară R, care este o reducere față de cuvântul invers - invers.) Această caracteristică acceptă un șir ca parametru în care ar trebui efectuată căutarea și spray-ul dorit șir, după care returnează ultima poziție. Intrarea celui de-al doilea parametru în primul parametru. (Spre deosebire de funcția STPOS () în funcția StrRpos (), linia dorită trebuie să cuprindă numai de la un caracter.) După aplicarea acestei caracteristici cu aceiași parametri ca în exemplul anterior, va fi găsită o altă poziție:

$ Enstr \u003d "salut lume!"; Echo "Simbol" L ":" .Strppos ($ ENSTR, "L"); // 9 pentru că Căutarea este efectuată de la sfârșitul liniei

Comparaţie

Se potrivește șirul cu acest șir? Aparent, codul adesea trebuie să caute răspunsul și la această întrebare, mai ales atunci când trebuie să procesați datele de intrare introduse de utilizatorul final.

Cea mai simplă metodă de căutare a unui răspuns la întrebarea dacă șirurile sunt aceleași, constă în utilizarea unei simple operațiuni de comparație pentru egalitate (\u003d\u003d), care oferă o inspecție asupra egalității nu numai a liniilor, ci și a numerelor. Când utilizați operația \u003d\u003d, două linii sunt considerate la fel, dacă conțin secvențe de caractere complet identice. În același timp, nu se efectuează în conformitate cu definiția mai strictă a acelorași linii, de exemplu, condițiile în care aceste linii sunt stocate în aceeași adresă în memorie, dar este luată cazul literelor (cu alte cuvinte, în considerare dacă literele sunt comparate cu capitalul sau literele mici).

Rezultatele comparației a două rânduri care utilizează operarea \u003d\u003d (sau operațiile corespunzătoare< и >) Puteți avea încredere numai dacă ambii operanzi sunt rânduri și se știe că nu există nici o transformare de tip. Iar rezultatele verificării utilizând funcția STRCMP (), care este descrisă mai jos, pot fi întotdeauna de încredere.

Cea mai importantă caracteristică a comparației rândului, cu care se efectuează cantitatea principală de muncă este STRCMP (). Această caracteristică are două linii ca parametri și compară octeți de octeți până la detectarea diferenței. După aceea, funcția returnează un număr negativ dacă prima linie este mai mică decât cea de-a doua și numărul pozitiv dacă a doua linie este mai mică decât prima. Dacă șirurile sunt identice, funcția STCMP () returnează zero.

Funcția STRSSECMP () este valabilă pentru același principiu, cu excepția faptului că, în comparație cu egalitatea, nu se ia în considerare cazul literelor. De exemplu, apelați funcția STRSSECMP ("Hei!", "Hei!") Trebuie să returneze zero.

Căutare

Funcțiile de comparație nou descrise vă permit să aflați dacă o singură linie este egală cu o altă linie. Și pentru a determina dacă o singură linie este conținută în cealaltă, funcția STPOS () descrisă mai sus sau funcția STRSTR () și funcțiile similare acestuia.

Funcția STRStr () ia șirul ca parametri în care trebuie efectuată căutarea și șirul dorit (în ordinea specificată). În caz de succes, această funcție returnează o parte a liniei, care începe cu prima intrare a șirului dorit (și include șirul dorit). Dacă nu se găsește un astfel de șir, funcția returnează o valoare falsă. Următorul fragment de cod oferă exemple de aplicare a acestei caracteristici:

$ str \u003d "salut lume!"; $ Findstr \u003d "Lumea"; Echo "substro" $ Findstr."În linia sursă:" .StRStr ($ str, $ Findstr);

Pe lângă funcția STRCMP (), funcția STRStr () are o versiune care este insensibilă la registru, care are numele Stristr () (litera I în acest nume este o reducere de la cuvântul insensibil - insensibil). Funcția Strustr () este identică cu funcția STRSTR () în toate privințele, cu excepția faptului că atunci când sunt comparate, literele mici sunt tratate ca majuscule.

Eșantionarea substringului

Multe funcții ale șirului PHP sunt efectuate deasupra rândurilor de tăiere și de inserare. Sub tăiere, se înțelege eșantionul unei părți a liniei și sub modificarea selectivă a șirului. Ar trebui să se țină cont de faptul că chiar funcțiile de inserare (cel mai adesea) nu modifică șirul specificat ca parametru de intrare. În mod tipic, astfel de funcții returnează o copie modificată și lăsați parametrul original neschimbat.

Cea mai ușoară modalitate de a selecta o parte a liniei este de a utiliza funcția substant (), care returnează un nou șir care conține o parte a simbolului ulterior de pe linia veche. Ca parametri, funcția substr () ia șirul (din care proba de substring este eșantionată), un număr întreg (poziția cu care începe substringul necesar) și un parametru al treilea integer opțional care stabilește lungimea substringului necesar. Dacă nu este specificat al treilea parametru, se înțelege că substringul continuă până la sfârșitul rândului. (Trebuie amintit că atunci când se utilizează această funcție, numerotarea pozițiilor din șir începe cu zero și nu din unitate, ca în toți parametrii funcțiilor PHP, care indică poziții numerice în linii.) De exemplu:

$ str \u003d "salut lume!"; ECHO MB_SUBSTR ($ str, 7, 3, "UTF8"); // "pace"

Și parametrul cu denumirea poziției inițiale și parametrul cu lungimea de desemnare poate fi negativ, dar în ambele cazuri un înțeles negativ are un sens diferit. Dacă poziția inițială este negativă, poziția simbolului inițial al substringului este determinată de numărătoarea inversă de la capătul liniei și nu un număr direct de la începutul șirului. (Poziția inițială egală cu -1 indică faptul că numărătoarea inversă începe cu ultimul simbol, valoarea -2 indică simbolul penultim, etc.)

Pe baza acestui fapt, ar fi posibil să presupunem că lungimea negativă a lungimii implică, de asemenea, că substringul trebuie determinat prin numărătoarea inversă de la simbolul inițial și nu o referință directă, dar situația este diferită. Declarația conform căreia caracterul din poziția inițială este primul caracter din linia returnată (și nu ultima), rămâne întotdeauna corectă. În schimb, parametrul cu o valoare de lungime negativă înseamnă că caracterul final este determinat de numărătoarea inversă de la capăt și nu trimiterea directă din poziția inițială.

Mai jos sunt câteva exemple cu parametri pozitivi și negativi:

$ str \u003d "salut lume!"; ECHO MB_SUBSTR ($ str, 7, 3, "UTF8"). "
"; //" lumea "Echo MB_Substr ($ str, -4, 3," utf8 ")."
"; //" lumea "Echo Mb_substr ($ str, 0, -5," utf8 ")."
"; // "Buna ziua"

Îndepărtarea golurilor și filelor de la rânduri

Din punct de vedere formal, funcția CHOP (), LTRIM (LTRIM () și Trim () este funcțiile de lucru cu substraturi (care sunt reamintate în mare măsură de alte funcții), dar, de fapt, funcțiile menționate sunt concepute pentru a elimina caracterele inutile din linii. Funcțiile CHOP (), LTRIM () și Trim () Îndepărtați nava spațială care se află la capăt, la început, la început și la capăt, din șirul indicat ca parametru Singure Singur.

În plus față de spații, aceste funcții elimină alte spații de spațiu similare cu cele indicate de secvențele de comandă, \\ n, \\ r, \\ t și \\ 0 (simboluri ale liniei, tab-uri și caractere zero utilizate pentru a desemna sfârșitul liniei în programele din c).

În limba PHP, este de obicei luată pentru a aplica eliminarea caracterelor spațiale la capătul liniei cu numele CHOP (), dar poate fi cauzată și o funcție identică care are un nume mai expresiv RTRIM (). În cele din urmă, trebuie remarcat faptul că funcția CHOP (), în ciuda faptului că numele său înseamnă "tăiat", sună foarte teribil, nu deteriorează parametrul original $ original, ceea ce salvează valoarea anterioară.

Înlocuirea șirului

Toate funcțiile discutate mai sus pentru a lucra cu rânduri au oferit o parte de probă a parametrului de intrare și nu formarea unei linii complet noi. Această secțiune discută Str_Replace () și substr_replace () și substr_replace () destinate acestui scop.

Funcția str_replace () vă permite să înlocuiți toată intrarea unui anumit substring specific la un alt șir. Această caracteristică durează trei parametri: șirul în care trebuie să fie executat căutarea, substringul să fie înlocuit după detectarea acestuia și șirul care trebuie aplicat pentru a înlocui. Luați în considerare următorul exemplu:

$ str \u003d "salut lume!"; Echo str_replace ("MIR", "Planeta", $ STR); // "Hi Planet!"

Înlocuirea se efectuează în raport cu toate intrările de substring găsite în bara de căutare. Dacă exemplul de mai sus a fost utilizat pentru a înlocui titlul orașului în enciclopedia depășită, după transformarea întregului text al enciclopediei în șirul PHP unic, un astfel de înlocuitor ar putea fi efectuat într-o singură trecere.

După cum se arată mai sus, funcția str_replace () selectează o parte a liniei sursă care urmează să fie înlocuită cu căutarea introducerii substristei dorite în linia sursă; În contrast, funcția substr_replace () alege o parte care trebuie înlocuită cu poziția sa absolută. Această caracteristică durează până la patru parametri: un șir în care trebuie efectuat un înlocuitor, un șir utilizat ca înlocuitor, poziția de pornire a înlocuirii și (ca parametru opțional) lungimea rândului este înlocuită. Luați în considerare următorul exemplu:

Echo substr_replace ("abcdefg", "-", 2, 3); // "ab-fg"

Partea CDE Row este înlocuită cu un singur semn. Vă rugăm să rețineți că, în acest caz, i sa permis să înlocuiască substringul cu un șir de altă lungime. Dacă este omisă parametrul cu lungimea de desemnare, se presupune că întreaga parte a liniei trebuie înlocuită după poziția inițială.

Funcția substr_replace () ia, de asemenea, parametri negativi ca desemnare a poziției inițiale și lungimea, interpretată în același mod ca și în funcția SCER (), care este descrisă mai sus. Este important să vă amintiți că, ca urmare a operațiunilor efectuate folosind funcțiile str_replace și substr_replace, Șirul sursă rămâne neschimbat.

În cele din urmă, există un număr de caracteristici mai puțin utilizate pe scară largă care formează linii noi de la vechi. Funcția Strrev () returnează pur și simplu un șir nou în care caracterele șirului de intrare sunt plasate în ordinea inversă. Funcția STR_REPEAT () ia un singur șir și un parametru întregi și returnează șirul în care numărul specificat de copii ale parametrului de șir colectat:

ECHO STR_REPEAT ("ABC", 3); // abcabcabc.

Funcții pentru conversia cazului de litere

Aceste funcții vă permit să convertiți litere mici la majuscule și viceversa. Funcția Strolower () returnează un șir în care toate literele sunt convertite în litere mici. Nu contează dacă șirul inițial conține litere mari de capital sau majuscule și mici. De exemplu:

$ str \u003d "salut lume!"; Echo mb_stolower ($ str, "utf8"); // "Salut Lume!"

Dacă ați întâmpinat deja o necesitate de a efectua o cantitate mare de formulare, s-ar putea observa că funcția STRTOLOWER () este doar un mijloc convenabil de procesare a adreselor de e-mail primite de la acei utilizatori care încă nu știu că literele înregistrează în aceste adrese nu sunt luate în considerare. Nu mai puțin util sunt alte caracteristici legate de categoria în cauză.

Funcția STRTOUPER () returnează un șir în care toate literele sunt convertite în majuscule. De exemplu, puteți aduce următorul fragment de cod:

$ str \u003d "salut lume!"; ECHO MB_STRTUPPER ($ STR, "UTF8"); // "SALUT LUME!"

Funcția UCFIrst () convertește numai prima literă de șir la partea superioară, funcția UCWords () se transformă în litera superioară a fiecărui cuvânt din rând. Nici funcția UCWords (), nici UCFIrst () nu au o funcție similară pentru codificarea multibytă, atât de incompatibilă cu rândurile care conțin chirillic.

Funcții pentru introducerea caracterelor de control

Unul dintre avantajele limbajului PHP este că se poate aplica Ziua de schimb de date cu aproape orice sistem. Fondurile ca acesta este obișnuit să ia în considerare ca un fel de "lipici de program". În acest rol, limba PHP este utilizată pentru a interacționa cu serverele de bază de date, serverele LDAP, pentru a face schimb de date prin prize și conexiune HTTP. Adesea, o astfel de interacțiune se realizează prin pre-crearea unui șir de mesaje (cum ar fi o cerere de bază de date) și apoi transferați la acest mesaj la programul destinatar. Dar în programele atașate adesea o semnificație specială unor simboluri și, prin urmare, trebuie să se transforme în caractere de control. Aceasta înseamnă că programul destinatarului este dat să ia în considerare astfel de simboluri ca o parte literală a liniei și să nu aplice o prelucrare specială pentru ei.

Mulți utilizatori pentru a face față acestei probleme permit utilizarea așa-numitului mod "Magic Quotes", care asigură că citatele vor fi convertite pentru a controla caracterele înainte de a introduce rânduri în baza de date. Dar dacă un astfel de mod de procesare este impracticabil sau nedorit, atunci trebuie să utilizați instrumente vechi vechi care introduc simboluri ale liniei de panglică inversă și eliminarea ulterioară a acestor caractere.

Funcția AddSlashes () convertește ghilimele unice și duble, simbolurile de deficiență inversă și caracterele zero în secvențe de control utilizând un simbol de feedback, deoarece caracterele specificate sunt de obicei convertite în secvențe de control atunci când se prepară interogări de bază de date:

$ escapedstring \u003d addslashes ("rând cu" citate "."); $ Query \u003d "inserați în valori de testare (quote) (" $ escapedstring ")"; $ rezultat \u003d mysqli_query ($ link, query query) sau matri (mysql_error ());

Execuția acestui cod vă permite să împiedicați interpretarea eronată a operatorului SQL la care șirul ar fi considerat ca fiind încheiat direct înainte de litera "K". Și după eșantionul acestor date, este necesar să se utilizeze funcția stripslasshes () pentru a îndepărta simbolurile panglicii inverse.

Funcția Quotemeta () convertește un set mai larg de caractere în secvențe de control. Toate aceste personaje au de obicei un înțeles special în linia de comandă Unix: "", "" "," + "," * ","? "," [","] "," ^ "," ("," $ "și" "și") ". De exemplu, execuția următorului cod:

$ Str \u003d "Aceste caractere ($, *, ^) trebuie să fie convertite."; Echo Quotemeta ($ STR);

afișează un astfel de șir:

Funcțiile de ieșire pe dispozitivul extern și în șir

Principalele modele utilizate pentru ieșire sunt imprimate și ecou, \u200b\u200bcare au fost luate în considerare în detaliu mai devreme. Modul standard de ieșire a valorilor variabile la dispozitivul extern este de a permite numele acestor variabile într-un șir de citate dublu (atunci când prelucrarea interpretului este substituită cu variabile), apoi transferați acest șir la designul de imprimare sau ecou .

Dacă este necesară o ieșire și mai precis formatată, puteți utiliza limbajul PHP și Sprintf () și Sprintf () furnizat de PHP. Aceste două funcții iau aceiași parametri: o linie specială a formatului, urmată de un număr arbitrar de alți parametri substituiți în locațiile dorite din șirul formatului pentru a obține rezultatul. Singura diferență dintre funcțiile de imprimare () este că PrintF () trimite șirul rezultat direct pe dispozitivul extern utilizat pentru ieșire, un sprintf () returnează șirul rezultat ca rezultat al executării acestuia.

Câteva cuvinte pentru programatorii experimentați care lucrează în C. Această versiune a funcției Sprintf () este ușor diferită de versiunea C că funcțiile Sprintf () nu sunt necesare pentru a furniza o linie distribuită în care trebuie înregistrată înregistrarea, deoarece PHP Interpretul distribuie memoria pentru șirul rezultat în numele utilizatorului.

Principala dificultate asociată cu utilizarea acestor funcții este definirea corectă a șirului de format. Fiecare personaj din șirul formatului apare în valoarea rezultată în formă directă, cu excepția caracterelor% și a caracterelor care urmează imediat aceste caractere. Simbolul% indică începutul specificației de transformare, ceea ce indică modul de afișare a unuia dintre parametrii dispozitivului extern care urmează șirul de format.

După semnul% există cinci elemente care fac parte din specificațiile de transformare, care sunt descrise mai jos, iar unele dintre ele sunt opționale: umplerea, alinierea, lățimea minimă, precizia și tipul:

  • Pentru a indica dacă numărul este negativ, se aplică o denumire opțională sub forma unui semn "minus" (-).
  • Singurul simbol de umplere (opțional) reprezintă 0, fie un spațiu (). Acest simbol este folosit pentru a umple orice spațiu, care, în absența acestuia, ar fi gol, dar utilizatorul a insistat asupra alocării utilizatorului (stabilirea prea multă valoare a parametrului minim de lățime). Dacă acest simbol de umplere nu este specificat, atunci în mod implicit, spațiile sunt umplute.
  • Simbolul de aliniere opțional (-) arată dacă valoarea de ieșire trebuie aliniată la marginea stângă sau dreaptă. Dacă este specificat acest simbol, valoarea va fi aliniată de-a lungul marginii stângi și, în absența acesteia, se aplică alinierea de-a lungul marginii drepte.
  • Valoarea numerică opțională a lățimii minime, care indică numărul minim de poziții trebuie să ocupe ieșirea. (Dacă ieșirea valorilor necesită mai multe poziții simbolice decât cele indicate, valoarea de ieșire depășește aceste limite.)
  • Specificatorul de acuratețe opțional, conceput ca punct (.), Urmat de un număr. Specificatorul indică ce precizie măsurată de numărul de poziții zecimale după punctul trebuie afișată cu un punct plutitor de dublă precizie. (Aplicarea acestei specificații nu are nicio influență în producția de date, altele decât numerele de puncte plutitoare cu precizie duală.)
  • Un singur caracter care indică modul în care trebuie interpretat tipul de valoare. Caracterul F indică faptul că valoarea trebuie afișată ca un număr de punct de plutire cu dublu precizie, simbolul S indică faptul că valoarea de ieșire trebuie efectuată sub formă de șir și restul personajelor posibile (B, C, D, O, x, x) spun că valoarea trebuie interpretată ca număr întreg și de ieșire în diferite formate. Aceste formate sunt B, care denotă ieșirea în formatul numerelor binare, C - ieșirea rezultată a simbolului cu o valoare adecvată a codului ASCII, o necesită o ieșire în formatul numerelor octanice, X - pentru ieșire În formatul numerelor hexazecimale (cu numere confuze de numere în litere mici) și X - pentru ieșirea numerelor hexazecimale, în care literele majuscule sunt utilizate ca denumiri de litere.

Mai jos este un exemplu de ieșire a aceluiași număr cu un punct plutitor de dublă precizie în mai multe moduri diferite:

 % 10f. 
% -10f.
% 2.2F, $ valoarea, valoarea $, valoarea $, valoarea $);?\u003e

Aceasta duce la astfel de rezultate:

Proiectat în acest exemplu

...
Este un descriptor HTML care indică browserul pe care blocul închis în acest descriptor ar trebui să formate în literalmente, fără a comprima mai multe spații într-una etc.

Caracteristici pentru lucrul cu codul HTML

Limba PHP asigură o serie de funcții de manipulare cu linii care conțin caracteristicile de date ale Web-ului. Informații generale despre aceste funcții sunt afișate în tabelul de mai jos:

Funcții de șir proiectate pentru a lucra cu codul HTML

Funcţie Descriere
htmlspecialchars () Acceptă un șir ca parametru și returnează un șir în care patru caractere având o valoare specială în limba HTML sunt înlocuite cu linii speciale. Fiecare dintre aceste caractere este înlocuit cu componenta HTML corespunzătoare, care, după implementarea textului, pagina din browser este înlocuită cu simbolul inițial. Simbol & înlocuit cu componenta și simbolul "(simbol dublu simbol) - component"< - < а символ > - >
htmlestii () Efectuează o prelucrare mai completă în comparație cu HtmlSpecialChars (), adică Înlocuiește componenta HTML nu numai caractere speciale, dar și toate caracterele pentru care componenta HTML este înlocuită.
get_html_translation_table () Acceptă una dintre cele două constante speciale (HTML_SPECIAL_CHARS sau HTML_ETITITITS) și returnează tabelul de conversie utilizat de caracteristicile HTMLSPECIDECHARS () sau Htmlesties (). Tabelul de conversie este o matrice a cărei cheile sunt șiruri de caractere și valori corespunzătoare - rânduri concepute pentru a le înlocui.
nL2BR () Ia un șir ca parametru și returnează același șir, dar cu descriptorii
Inserat în fața tuturor simbolurilor capătului șirului (\\ n, \\ r sau \\ r \\ n). Necesitatea utilizării acestei caracteristici apare, de exemplu, dacă este necesară furnizarea aceleiași partiții pe paragrafele din textul afișate în browser, ca în textul sursă
strip_tags () Acceptă un șir ca parametru și efectuează totul pe ea depinde de formarea unui șir rafinat din toate descriptorii HTML și din toate descriptorii PHP

Hashing de date utilizând algoritmul MD5

Algoritmul MD5 este un algoritm de procesare a șirului care este utilizat pentru a genera așa-numitul digest sau o semnătură digitală pentru orice șir transmis ca parametru. Algoritmul generează o linie de lungime constantă bazată pe linia de intrare, constând din 32 de cifre hexazecimale (0-9, A-F). Rezultatele formate utilizând algoritmul MD5 au proprietăți foarte utile descrise mai jos:

  • Algoritmul MD5 asigură întotdeauna formarea unei linii de ieșire neschimbate atunci când primește aceeași linie de intrare, deci criptarea utilizând MD5 nu poate fi utilizată pentru a stoca parolele.
  • Rezultatele utilizării algoritmului MD5 au o lungime fixă \u200b\u200bși sunt distribuite foarte uniform pe întreaga gamă de valori posibile.
  • Șirul de intrare poate fi format corespunzător algoritmului MD5 de ieșire specificat sau sunt create două linii de intrare, procesarea cărora ar duce la același șir de ieșire, dar numai în anumite condiții.

Implementarea algoritmului MD5 în limba PHP este disponibilă ca o funcție MD5 (), care ia linia ca date de intrare și produce rezultate sub forma unui digest de 32 de caractere. De exemplu, executarea următorului cod:

$ str \u003d "salut lume!"; Echo "Codul Hash pentru un șir" $ str ": ".md5 ($ str)."
"$ Str \u003d" salut, lume! "ECHO" Hash Cod pentru un șir de $ str ": ".md5 ($ str)."
"$ Str \u003d" Hello World "; Echo" Hash Cod pentru o linie "$ str": ".md5 ($ str)."
";

duce la fereastra browser a acestor rezultate în fereastra browserului:

Desigur, în acest caz, toate liniile de intrare sunt foarte amintite unul de celălalt, dar liniile de ieșire nu au nicio asemănare vizibilă. În plus, gama de valori posibile de ieșire este extrem de uriașă (1632), prin urmare probabilitatea de coincidență a rezultatelor procesării a două linii diferite (în care este generat același MD5) este extrem de mic.

Datorită caracteristicilor caracteristice de mai sus ale algoritmului MD5, valorile obținute din acesta pot fi utilizate pentru a rezolva o varietate de sarcini, inclusiv cele descrise mai jos:
Calcularea verificării mesajului sau a fișierului
Pentru a verifica dacă distorsiunea mesajului nu a apărut în timpul transferului, puteți trece împreună cu mesajul Digest MD5 și după primirea din nou a mesajului pentru a forma Digest MD5. Dacă două versiuni de digerare nu coincid, înseamnă că distorsiunea a fost permisă în timpul transmisiei.
Controlul asupra faptului dacă conținutul fișierului rămâne neschimbat
Această sarcină este similară cu sarcina de calculare a verificării. Algoritmul MD5 este adesea folosit pentru a efectua o astfel de operație în mașinile de căutare, dacă trebuie să verificați periodic dacă pagina web sa schimbat și, dacă este necesar, efectuați re-indexarea. Faptul este că, pentru reconciliere, este mult mai ușor să se organizeze stocarea Digest MD5 decât întregul fișier sursă.
Împărțind o varietate de rânduri sau fișiere pe un subset
Pentru a rezolva problema partiționării unui set de șiruri pe subseturi selectate aleatoriu, puteți calcula digerarea MD5 a fiecărei linii, luați primele caractere hexazecimale, convertiți-le la număr, pentru a obține echilibrul de a împărți acest număr de către modulul Prin numărul de subseturi n și utilizați acest reziduu ca un subset al subsetului. La care ar trebui înregistrată această linie.

În plus față de funcția MD5 (), funcția MD5_File () este furnizată în limba PHP, care acceptă numele fișierului ca parametru și returnează valoarea MD5 a carcasei corespunzătoare conținutului fișierului.

Funcții destinate evaluării similitudinii șirurilor de caractere

În practică, este adesea necesar să se determine cât de două linii similare sunt. Este evident că rezultatele evaluării similitudinii corzilor depind de ceea ce se înțelege prin asemănarea liniilor.

Dacă criteriul de evaluare similaristică examinează similitudinea în scris, atunci puteți aplica metric Levenshtein.. Funcția LEVENSHTEIN () durează două rânduri ca parametri și returnează datele pe care este necesar numărul minim de opțiuni pentru adăugarea, ștergerea și înlocuirea caracterelor pentru a converti o linie la alta. Luați în considerare un exemplu:

Echo Levenshtein ("Tim", "Timp"); // 1 Echo Levenshtein ("Boy", "Chefboyardee"); // 9 Echo Levenshtein ("niciodată", "inteligent"); // 2.

Dacă o similitudine este considerată ca un criteriu, este luată în considerare similaritatea fonetică, atunci este posibilă utilizarea funcțiilor Soundex () și Metafone () pentru a evalua similitudinea. Ambele funcții sunt luate ca parametru de intrare în considerare șirul și returnează linia-cheie cu denumirea pronunției acestui cuvânt (care este considerată ca cuvântul engleză). Dacă cele două cuvinte folosite ca conținutul șirului de intrare sunt exact aceeași valoare de ieșire, atunci ele par a fi pronunțate în mod egal.

Funcțiile analizei sintactice și ruperii pe lexeme

Uneori este necesar să se ofere în program să împărțiți rândurile în componente, ghidate de propria definiție a ceea ce ar trebui considerat o componentă. Procesul de separare a unui șir lung este numit partiții la Lexemes. În special, un astfel de proces face parte din procedura de interpretare generală sau compilarea oricărui program de calculator, inclusiv programul din PHP. În limba PHP, este prevăzută o funcție specială pentru acest scop - Strtok ().

Funcția Strtok () ia doi parametri: un șir destinat ruperii pe lexeme și un șir care conține toate distincțiile (simboluri care sunt considerate limite între leksmes). Când primiți mai întâi, ambii parametri sunt utilizați și funcția returnează o valoare a șirului, care este primul Lex. Pentru a selecta lexarea ulterioară, se efectuează același apel, dar este exclusă parametrul cu șirul sursă. Funcția își amintește adresa șirului specificat în primul parametru și îl folosește ca linie curentă. În plus, această caracteristică își amintește unde prelucrarea a fost întreruptă sub apelul anterior. Luați în considerare următorul exemplu:

$ token \u003d strrtok ("Open-sursă HTML-Embedded Web Scripting Web", ""); În timp ce ($ token) (Echo $ token ".
"$ token \u003d strrtok (" ");)

care duce la primirea acestei ieșiri în fereastra browserului:

Partiția liniei originale se efectuează în locul în care se află fiecare decalaj.

Funcția Strtok () formează Lexemes unul după altul. De asemenea, puteți utiliza funcția Explode (), care efectuează o acțiune aproximativ similară, fără a număra că păstrează toate lexemele într-o singură matrice simultan. După primirea lexemelor reprezentate sub formă de matrice, orice operațiune poate fi efectuată cu acestea, inclusiv sortarea.

Funcția Explode () durează doi parametri: o linie de divizare și un șir care ar trebui împărțite în lexeme. Această caracteristică returnează o matrice, fiecare element al cărui element este un substring situat între instanțele separatorului într-un șir care trebuie separat. Luați în considerare următorul exemplu:

$ Exploderesult \u003d explodează ("și", "unul și doi și trei");

care are ca rezultat o matrice de $ explode_result care conține trei elemente, fiecare dintre acestea fiind un șir: "unul", "doi" și "a trei". În acest exemplu particular, nu se găsește o literă capitală unică în niciuna dintre liniile conținute în matrice, deoarece separatorul și nu este prezent ca rezultat.

Șirul de separare utilizat în funcția Explode () este în mare parte diferit de șirul cu demarchangerii utilizați în funcția STRTK. Separatorul este o linie completă, astfel încât toate caracterele acestui șir trebuie să fie găsite în linia originală în același mod ca și în separator, astfel încât acest separator să poată fi considerat detectat.

Pe de altă parte, un șir cu demarchangers în funcția Strtok () stabilește multe caractere individuale, fiecare dintre acestea fiind considerat un delimitator. Aceasta înseamnă că funcția Explode () acționează mai selectiv, dar este mai susceptibilă la încălcări ale muncii. În special, dacă chiar și singurul spațiu sau simbol al sfârșitului liniei, care face parte din separator, va fi ratat întâmplător într-un rând lung, atunci toată funcționarea acestei funcții poate fi ruptă.

Funcția Explode () are o funcție inversă, implode (), care are doi parametri: linia de conectare (similară cu linia de separare din funcția Explode ()) și o matrice de șir ca aceea care returnează funcția Explode () . Funcția Implode () returnează un șir creat prin introducerea unei linii conjunctive între toate într-un rând care merge la elementele de șir din matrice.

(PHP 4, PHP 5, PHP 7)

str_replace - Înlocuiește toate introducarea șirului de căutare de pe șirul de înlocuire

Descriere

Această caracteristică returnează un șir sau o matrice în care toate rulațiile de căutare în subiect sunt înlocuite cu înlocuirea.

Dacă nu aveți nevoie de reguli complexe de căutare / înlocuire (de exemplu, expresii regulate), utilizarea acestei funcții este preferabilă preg_replace ().

Lista parametrilor

Dacă căutați și înlocuiți - arrays, atunci str_replace () Utilizează fiecare valoare din matricea corespunzătoare pentru a căuta și a înlocui în subiect. Dacă un șir gol va fi utilizat ca o matrice înlocuită în matricea de înlocuire a elementelor decât în \u200b\u200bcăutare. Dacă căutarea este o matrice, iar înlocuirea este un șir, atunci această linie de înlocuire va fi utilizată pentru fiecare element de căutare. Cazul opus nu are nici un sens.

Dacă căutarea sau înlocuirea este matricea, elementele lor vor fi procesate de la primul la ultimul.

Valoarea dorită, cunoscută și ca ac. (ac). Pentru o varietate de valori dorite, puteți utiliza o matrice.

A inlocui

Valoarea de înlocuire va fi utilizată pentru a înlocui valorile dorite ale căutării. Pentru o varietate de valori, puteți utiliza o matrice.

Subiect.

Un șir sau o matrice în care căutarea și înlocuirea este, de asemenea, cunoscută haystack. (un teanc de fân).

Dacă subiectul este o matrice, căutarea cu înlocuirea va fi efectuată pe fiecare element al subiectului, iar rezultatul va fi, de asemenea, o matrice.

Dacă este trecut, acesta va fi setat la cantitatea de înlocuiri.

Valori de returnare

Această caracteristică returnează un șir sau o matrice cu valori înlocuite.

Exemple

Exemple # 1 Exemple de utilizare str_replace ()

// atribuirea
$ Bodytag \u003d str_replace ("% corp%", "negru", " " );

// ASIGNS: HLL WRLD F PHP
$ vocale \u003d matrice ("a", "e", "eu", "u", "un", "eu", "o", "u");
$ NumaiConsonants \u003d str_replace ($ vocale, "", "salut World of PHP");

// ASIGNS: Ar trebui să mănânci pizza, bere și înghețată în fiecare zi
$ Frază \u003d. "Ar trebui să mănânci fructe, legume și zi de fibre.";
$ Sănătos \u003d matrice ("fructe", "legume", "fibră");
$ yummy \u003d matrice ("pizza", "bere", "înghețată");

$ Newprase \u003d str_replace ($ sănătos, $ yummy, frază de $);

// ASIGNS: 2
$ Str \u003d str_replace ("ll", "", "bun Golly Miss Molly!", $ Count);
eCHO $ \u200b\u200bCount;
?>

Exemplu # 2 Exemple de trucuri potențiale cu str_replace ()

// Procedura de înlocuire
$ Str \u003d. "String 1 \\ Nestro 2 \\ Rock 3 \\ R \\ Nestro 4 \\ n";
$ Comenzy \u003d matrice ("\\ r \\ n", "\\ n", "\\ r");
$ Înlocui \u003d "
" ;

// procesează primul \\ r \\ n pentru a evita înlocuirea lor.
echo $ Newstr \u003d str_replace (comanda $, $ înlocui, $ str);

// afișează F, pentru că A se înlocuiește cu B, apoi B pe C, și așa mai departe ...
// Ca rezultat, E va fi înlocuit cu F, deoarece înlocuirea are loc de la stânga la dreapta.
$ căutare \u003d matrice ("a", "b", "c", "d", "e");
$ înlocui \u003d matrice ("b", "c", "d", "e", "f");
$ subiect \u003d "A";
echo str_replace ($ Căutare, $ Înlocuire, $ Subiect);

// Afișaje: piuliță apoasă (în motivul de mai sus)
$ litere \u003d matrice ("I", "o");
$ Fructe \u003d matrice ("Apple", "nuc");
$ text \u003d "Sunt o";
$ Ieșire \u003d str_replace ($ litere, $ fructe, $ text);
ieșire de ieșire ecou;
?>

Notează

cometariu: Această caracteristică este sigură pentru prelucrarea datelor în formă binară.

Avertizare

Înlocuirea înlocuirii

La fel de str_replace () Înlocuirea de la stânga la dreapta, atunci când utilizați mai multe înlocuiri, acesta poate înlocui valoarea introdusă anterior la alta. Vedeți și exemplele de pe această pagină.

cometariu:

Această caracteristică este sensibilă la registru. Utilizare str_ireplace () Pentru înlocuire, insensibil la registru.