Programare eficientă în PHP: matrice în șiruri. Programare PHP eficientă: Arrays to String PHP Array Values ​​to String

Convertirea datelor de la o reprezentare la alta este un mecanism popular, adesea singurul, pentru rezolvarea unei probleme. Un tablou este un caz simplu al unui obiect. Un șir este o reprezentare naturală a informațiilor pentru transmitere, procesare sau stocare.

Experiența și semantica implementate în PHP: tablourile, funcțiile și structurile sintactice fac posibilă crearea de soluții optime pentru procesarea informațiilor așa cum sunt prezentate.

Informații: caractere, șiruri și date

În forma sa „pură”, informația este un șir de caractere, vorbire sau o secvență de semnale. Șirurile, matricele și obiectele apar în programare - acestea sunt variante ale construcțiilor de șiruri artificiale. Numerele sunt, de asemenea, șiruri, dar numere, nu simboluri.

PHP vă permite să convertiți un șir într-o matrice în multe moduri diferite. Există două funcții speciale care fac acest lucru „pe cont propriu”:

  • $aArr = explode("x", "șir");
  • $aStr = implode("y", $aArr).

Prima funcție găsește caracterul delimitator „x” și împarte șirul „șir” folosindu-l. Matricea rezultată conține exact numărul de elemente (linii) care sunt cuprinse între caracterele „x”. Simbolul separatorului poate să nu fie neapărat cel clasic:

  • virgulă;
  • punct;
  • punct şi virgulă.

Puteți împărți un șir după subșir sau printr-o combinație specială de caractere.

Lungimea șirului este strlen() în PHP, lungimea matricei este count(). În primul caz, se numără numărul de caractere, în al doilea caz, numărul de elemente. Deoarece caracterul delimitator nu este inclus în elementele matricei, valoarea lui count() va fi egală cu numărul delimitatorilor din șirul convertit minus unu.

În transformarea inversă PHP, matricele în șir sunt convertite cu un caracter delimitator (poate fi gol), iar toate datele (numerele și expresiile booleene) sunt îmbinate într-un șir. Un element al unui tablou poate fi un alt tablou, dar programatorul trebuie să se ocupe de acest caz în mod specific. Funcția implode() este departe de a fi recursivă.

În acest exemplu, nu există nicio problemă la conversia matricelor PHP într-un șir, atâta timp cât nu există nicio altă matrice printre elementele lor. Când elementele asociative sunt convertite, informațiile cheie se pierd. În special, elementele „prune” și „piersică” vor fi dezbrăcate de chei.

Delimitatori de date și chei

Nu luați în considerare punctele, virgulele, două puncte etc. ca delimitatori. Acesta este un caz special de separare a datelor unul de celălalt. La transformarea unui șir în PHP, o matrice multidimensională nu va funcționa, iar indecșii asociativi nu vor avea de unde să vină.

Analizarea unui șir prin delimitator produce întotdeauna șiruri. Dar acesta nu este un motiv să ne oprim aici. După ce ați analizat o linie în elementele sale componente, puteți continua.

De exemplu, a existat un paragraf cu mai multe propoziții (separator "." - punct), mai multe fraze în propoziție (separatoare "," - virgulă, ";" - punct și virgulă și "." - punct), fraza conține cuvinte ( delimitator " " - spațiu, "," - virgulă, ";" - punct și virgulă și "."

Cu această dezasamblare în PHP se poate obține cu ușurință o matrice multidimensională, dar algoritmul va fi foarte urât: numărul de separatori crește, iar lipsa conexiunii dintre paragrafele alăturate este garantată pentru a asigura duplicarea propozițiilor, frazelor și cuvintelor.

Prin analizarea șirurilor de caractere, puteți converti imediat secvențele de cifre în numere, iar valorile logice în adevărat și fals. Dar aceasta este, în special, informațiile cheie încă nu vor apărea, deoarece cheia este sensul, doar un index numeric poate fi creat automat.

Separatoare complexe

Imprimarea unei matrice PHP într-un șir este adesea folosită în scopuri utilitare. Un fișier de configurare este în mod tradițional scris linie cu linie, cu un simbol egal sau două puncte care separă numele de valoare.

Cu această soluție, ieșirea unui tablou în PHP se face într-un fișier, se obține automat diviziunea șirurilor, iar cu recunoașterea inversă se obțin cu ușurință tablouri asociative.

Citind fișierul, programatorul primește liniile, iar prin ruperea fiecărei linii cu „=" sau „:”, el obține numele și valoarea acesteia. O manipulare foarte populară, deși este mai modern să folosiți notația XML din simplul motiv că, pe lângă nume și valori, pot fi stocate și restaurate date suplimentare, de exemplu, atribute variabile.

În exemplul cu paragrafe (de exemplu, text natural pentru a construi un dicționar sau rezultatul analizei pentru a crea un eșantion de date), ceea ce este important nu este procedura specifică pentru conversia unui șir într-o matrice, ci o soluție cuprinzătoare pentru toate paragrafele sau blocuri de informații.

De obicei, o astfel de sarcină va necesita o soluție inversă, când „setul” de date generat va trebui utilizat pentru a căuta informații în el sau pentru a le asambla înapoi într-un șir.

Dezasamblarea și reasamblarea șirurilor - validarea datelor

În PHP: arrays to string este soluția exactă. Dacă informațiile sursă ar putea avea erori de sintaxă, spații suplimentare sau simboluri incorecte, atunci acestea nu vor fi acolo în timpul analizării. Rezultatul transformării informațiilor inițiale în conformitate cu legile nescrise ale programării se realizează strict formal, iar rezultatul va fi expus în mod clar pe rafturi.

Procedura inversă va produce șirul sursă corect. Dacă comparați cantitatea de informații sursă și rezultatul transformării inverse, puteți trage concluzii despre unde s-au făcut erori sau s-a produs pierderea datelor. În PHP, lungimea unui tablou în contextul lungimii inițiale a șirului ne poate permite să tragem concluziile necesare.

Etichete de oră, dată și eveniment

În dezvoltarea proiectelor critice, atunci când se creează obiecte de control, de exemplu, timp sau evenimente, un rând este o reprezentare a datelor, iar o matrice este alta. Dar în aplicare sunt echivalente.

Când este necesar să se efectueze calcule matematice sau logice, programatorul manipulează matricea când este necesar să se stocheze date, el folosește versiunea șir.

Indecși de acces la câmpurile bazei de date - o practică reală a acțiunii comune a MySQL și PHP, matrice într-un rând = un index pe rândurile mai multor tabele de baze de date. Dacă baza de date conține o duzină de tabele, iar în fiecare tabel rândurile pot fi selectate printr-o combinație de nume (valori) într-o anumită combinație, atunci după ce au creat matrice de acces la rând, puteți avea acces ulterior la ele folosind un algoritm de formare a indexului, si nu cautand in baza de date .

Convertirea unui tablou într-un șir poate fi considerată ca un algoritm pentru formarea indexului dorit, în timp ce conținutul matricei este format sub controlul unor evenimente sau acțiuni ale utilizatorului complet diferite.

Îmbinarea tablourilor

Funcțiile PHP vă permit să manipulați liber matrice. Dar întotdeauna apar probleme pentru a selecta date unice sau a găsi date într-o matrice.

Prima problemă este rezolvată iterativ: o matrice (sau mai multe matrice) este iterată și se formează un șir de valori unice - o soluție evidentă, dar nu cea mai eficientă.

Găsirea datelor într-o matrice este, de asemenea, un ciclu, iar dacă există o mulțime de elemente, atunci ciclul va fi destul de lung și va dura o perioadă de timp vizibilă. Este posibil să trimiteți o matrice către un șir și să utilizați funcția strpos() pentru a găsi o apariție a elementului dorit, dar acest lucru va introduce problema detectării unei apariții eronate.

De exemplu, a fost căutat cuvântul „tavă”, iar apariția lui a fost găsită în cuvântul „ciocan”. Puteți scăpa de astfel de erori dacă îmbinați toate elementele matricei într-un șir folosind un separator special, ceea ce va evita ambiguitatea.

Dacă linia conține „[tava]” și „[ciocanul]”, atunci nu vor fi probleme cu căutarea.

Dar nu există nicio garanție că, pe cantități reale de date, funcția strpos() va funcționa mai rapid decât o buclă care iterează peste elementele matricei.

Cea mai bună soluție este ca matricea sau șirul să facă singur ceea ce trebuie. Dacă complicăm oarecum matricele și simplificăm șirurile de caractere, deoarece primele sunt un caz special al unui obiect, iar cele din urmă sunt serializarea tradițională, atunci fiecare își va face treaba lui.

La momentul potrivit, obiectul este o matrice, iar atunci când este nevoie de un șir, acesta va fi un șir. În acest caz, nu este absolut necesar să aveți în obiect atât o matrice, cât și un șir în același timp. Puteți construi o structură unică de date cu acces rapid. Și puneți logica „matrice” și „șir” în metodele obiect.

Abordarea orientată pe obiect simplifică soluționarea multor probleme de procesare a informațiilor șiruri, vă permite să evitați concentrarea asupra matricelor, buclelor și a funcției de procesare a șirurilor a PHP în sine.

Atât șirurile, cât și matricele sunt semnificația reală a realității, aplicației, sarcinii. Nu există o astfel de sarcină - trimiterea de matrice în șiruri în PHP. Dar există o sarcină de a obține un paragraf (propoziție, frază, cuvânt, număr...) pe baza rezultatelor obținute în algoritmul anterior.

Algoritmul anterior poartă o semnificație, iar expresia exactă a acestui sens este conținută în matrice. Următoarea etapă a algoritmului este transformarea sensului într-o altă reprezentare, convenabilă pentru prelucrare sau aplicare ulterioară.

Privind algoritmul ca dinamica semnificației și transformării datelor, este posibil să se formeze transformări fiabile, ușor de înțeles și eficiente.

PHP, ca limbaj de programare modern, oferă capacitatea de a procesa date, al căror tip poate fi determinat în momentul utilizării. Tipul de date se poate schimba în timpul execuției programului.

Șirurile de caractere sunt singurul tip de date la care sunt turnate în mod natural datele de alte tipuri, din simplul motiv că orice dată dată este întotdeauna o secvență de caractere.

Matrice în PHP

Pe lângă variabilele obișnuite, PHP oferă programatorului sintaxă și funcții pentru lucrul cu matrice. În plus față de tablourile obișnuite care oferă acces la elementele lor prin cheie (un număr de la 0 la numărul de elemente), puteți utiliza șiruri asociative. În aceasta din urmă, accesul se poate realiza atât printr-un index numeric (alocat automat), cât și printr-o tastă specificată de programator.

PHP oferă posibilitatea de a schimba indici și valori, ceea ce are sens, deoarece o cheie nu este oficial mai strictă decât o valoare, dar ar trebui să o utilizați cu atenție. De mult timp, tradițiile de programare au apelat la literele alfabetului latin. Chirilul, de regulă generală, aduce cu sine problema codificărilor. Nu ar trebui să abuzați de capacitățile limbii atunci când aveți nevoie de cod practic și sigur.

Opțiunea optimă de index este o expresie semnificativă în limba engleză, de preferință fără spații. Este grozav că sintaxa PHP declară „libertate” pentru chei, dar este mai bine să ai încredere în propria experiență și să te concentrezi pe codul sigur.

Cea mai interesantă și practică caracteristică a soluției PHP „arrays to string” este posibilitatea unei conversii reciproce echivalente.

PHP: Matrice și șiruri

Funcția PHP "arrays to string": $cLine = implode("/ ", $aStyle) produce un șir de caractere din toate elementele matricei $aStyle, separate prin caracterul "/". Dacă specificați „ ”, atunci toate elementele vor fi îmbinate într-o singură secvență continuă de caractere.

Funcția inversă $aStyle = explode("/", $cLine) creează o matrice cu toate liniile care sunt separate prin caracterul "/".

Când utilizați funcția explode(), este recomandabil, dar nu necesar, să verificați prezența caracterului delimitator dorit în șirul sursă.

De asemenea, puteți scoate matrice într-un șir în PHP folosind mijloace mai umane și controlate De exemplu, în bucla for, while, foreach, adăugând valorile elementelor de matrice la o variabilă șir folosind operatorul de atribuire: „.=". sau operatorul ".", care permite în procesul de formare a șirurilor de caractere rezultate (procesează fiecare element).

PHP: Imprimați matrice în șir prin obiecte

Un obiect este o colecție de date și cod. Nimic nu te împiedică să pui, de exemplu, două funcții în codul tău: scrie și citește. Datorită moștenirii și polimorfismului, dacă aveți un obiect cerc, puteți avea variațiile acestuia: albastru, roșu și verde.

Fiecare va fi scris (citit) diferit, dar exact modul în care este executată soluția PHP „arrays to string” nu va conta. În esență, obiectele poartă un anumit sens, au structuri diferite și metode diferite. Un exemplu cu două funcții - particular. La construirea unui astfel de mecanism în PHP, matricele vor fi plasate într-un șir diferit în fiecare caz specific.

Acest lucru deschide o mulțime de posibilități. Un obiect are două matrice, altul are douăzeci, iar strămoșul comun (de obicei primul este abstract) nu are nimic. Folosind metodele lor comune strămoșilor, nu trebuie să vă faceți griji că ceva nu este scris, citit, procesat sau afișat.

Datorită moștenirii, indiferent de ce formă este folosită oriunde în program, aceasta poate fi reprezentată ca șir și transmisă înapoi în obiectul acelei forme particulare.

Dacă trebuie să convertiți o matrice PHP într-un șir, există mai multe instrumente pentru aceasta. Utilizarea unui anumit instrument depinde de obiectivele tale.

1. Funcția Implode().

Cu ajutorul acestuia, puteți „lipi” elemente de matrice într-un șir, prin orice separator. Citește mai mult: implozie
Exemplu:

Echo implode("|", matrice(1, 2, 3)); // va produce linia: 1|2|3

Această funcție are un antagonist, explode(), care, dimpotrivă, împarte șirul de la delimitator în elemente de matrice. Citește mai mult: exploda

2. Funcția Serialize().

Sarcina principală a funcției este de a transforma o variabilă (în cazul nostru, o matrice) într-o stare potrivită pentru stocare.
Este folosit pentru a salva o matrice într-un șir și apoi a o converti înapoi într-o matrice. Puteți salva matricea într-un fișier sau bază de date și apoi o puteți restaura data viitoare când rulați scriptul.
Citește mai mult: serializați

$array = array("1" =>; "elem 1", "2" => "elem 2", "3" => "elem 3"); $șir = serialize($array); echo $șir; // va produce linia: a:3:(i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:"elem 3" ;)

Apoi, din această linie, puteți obține din nou matricea:

$array = unserialize($string);

3. funcția json_encode().

Returnează o reprezentare JSON a datelor. Puteți citi despre ce este vorba.
În cazul nostru, această funcție seamănă cu serializarea, dar JSON este folosit în principal pentru transferul de date. Va trebui să utilizați acest format pentru a face schimb de date cu javascript pe front-end. Mai multe detalii: json_encode

$array = array(1 => „unu”, 2 => „două”,); $json = json_encode($array); echo $json; // ("1":"unu","2":"două")

Funcția de apel invers json_decode() va returna un obiect de tip stdClass dacă al doilea parametru al funcției este fals. Sau va returna un tablou asociativ dacă true este trecut ca al doilea parametru. Detalii aici.

Bună ziua, ieri am studiat cum puteți împărți un șir și să obțineți o matrice din el. Astăzi vă aduc în atenție funcția opusă, cu ajutorul căreia putem converti matrice în șir. Acesta se numește funcția de implozie.

Principiul de funcționare al acestei funcții este similar cu cel precedent, dar îl vom analiza folosind un exemplu: $array = matrice() ;
„Numele meu”, „numele”, „Denis” $șir = implozie(;
" ", $array) ecou;
?>

$șir Am creat o matrice cu trei elemente și folosind funcții de implozie l-a transformat într-o sfoară. Această funcție poate prelua doi parametri. Primul este opțional și înseamnă ce delimitator va fi aplicat între elementele matricei. Dacă acest parametru nu este specificat, elementele matricei vor fi separate prin spațiu în mod implicit. Iar al doilea parametru specifică matricea în sine, care va fi convertită într-un șir. Aceștia sunt toți parametrii pe care îi suportă funcția studiată. Ca urmare a executării funcției, veți primi șirul (Numele meu este Denis). Dacă am fi specificat o virgulă ca separator, rezultatul ar fi fost (Numele meu este Denis). Cred că nu au fost probleme la învățarea acestei funcții și o vei putea folosi singur când

crearea site-urilor dvs. web

. Așa se încheie acest articol, după cum puteți vedea, a fost destul de mic ca volum, dar foarte important din punct de vedere practic. Ne vedem curand, succes in invatarea limbajelor de programare!

JavaScript este blocat în browserul dvs. Vă rugăm să activați JavaScript pentru ca site-ul să funcționeze!

imploda(PHP 3, PHP 4, PHP 5)

imploda

- Concatenează elementele matricei într-un șir (conversează matricea în șir) imploda Descriere

şir

(clei șiruri, bucăți matrice) Returnează șirul obținut prin concatenarea reprezentărilor în șir ale elementelor matricei piese, inserând un șir de lipici între elementele adiacente.

Exemplul 1: Exemplu de utilizare imploda() Returnează șirul obținut prin concatenarea reprezentărilor în șir ale elementelor matricei piese, inserând un șir de lipici între elementele adiacente. Comentariu: Din motive istorice, funcții puteți trece argumente în orice ordine, dar pentru unificare cu funcția

Exemplul 1: Exemplu de utilizare exploda() Returnează șirul obținut prin concatenarea reprezentărilor în șir ale elementelor matricei piese, inserând un șir de lipici între elementele adiacente. ar trebui folosită ordinea documentată a argumentelor.

Exemplul 1: Exemplu de utilizareÎncepând cu versiunea 4.3.0, argumentul funcției lipici

Această funcție combină valorile elementelor matricei într-un șir. Pentru a combina cheile elementelor matricei, utilizați următorul cod:

php implode pentru matrice imbricate

Dacă treceți o matrice multidimensională pentru a imploda, veți primi o eroare „Conversie matrice în șir”. Pentru a evita această eroare, utilizați următorul echivalent cu funcția implode:

Funcția multi_implode($glue, $array) ( $_array=array(); foreach($array ca $val) $_array = is_array($val)? multi_implode($glue, $val) : $val; return implode($ lipici, $_array);

Vezi și descrierile funcțiilor