Funcții pentru lucrul cu matrice php. Enumerarea tablourilor asociative. Crearea unui tablou în PHP

Functii pentru lucrul cu matrice în PHP destul de multe, iar acest lucru nu este surprinzător, având în vedere că trebuie să lucrezi cu matrice destul de des atunci când programezi. Și în acest articol vom analiza principalele funcții pentru care le-am creat lucrul cu matrice în PHP dezvoltatori.

Pentru început, să aruncăm o privire cea mai simplă funcție, care verifică dacă elementul se află în matrice. Funcția este numită in_array():

$arr = array("Num", "Str", "Int");
if (in_array("Str", $arr)) echo "Element găsit";
?>

După cum puteți vedea din exemplu, această funcție verifică prezența primului parametru printre valorile matricei date de al doilea parametru. Și se întoarce Adevărat dacă elementul este găsit sau fals dacă nu este găsit. Cei mai avansati vor întreba: „Dar ce zici de lucruri precum 0 și fals, pentru că acestea sunt valori diferite, dar PHP le consideră la fel?". Pentru a face acest lucru, în funcții in_array(). exista si un al treilea parametru, optional, care, daca are o valoare Adevărat, atunci funcția verifică nu numai valorile, ci și tipurile:

$arr = array(0, "Str", "Int");
if (in_array(false, $arr, true)) echo "Element găsit";
else echo "Element nu a fost găsit";
?>

O altă caracteristică foarte utilă este array_unique(), care preia o matrice și returnează o matrice fără valori duplicate:

$arr = array(3, 5, "Val", 3, "Val", 7);
$arr_uniq = array_unique($arr);
print_r($arr_uniq);
?>

După cum puteți vedea rulând scriptul, nu există valori duplicate în matricea rezultată.

Funcții foarte importante sunt funcțiile de extragere a unei părți a unui tablou din cel original (analog al funcției substr(), doar pentru șiruri):

$arr_2 = array_slice($arr, 3);
print_r($arr_2);
?>

Această funcție ia doi parametri: tabloul original și numărul elementului de la care ar trebui să pornească noua matrice (rețineți că numerotarea începe de la zero). După cum puteți vedea, noua matrice va fi de la elementul al cărui număr este specificat în al doilea parametru până la sfârșitul matricei originale. De asemenea, dacă adăugați un al treilea parametru, puteți seta lungimea noii matrice:

$arr = array(12, 10, 15, „Nume”, „Unele”, -0,5);
$arr_2 = array_slice($arr, 3, 2);
print_r($arr_2);
?>

Ca rezultat, veți vedea: " Matrice ( => Nume => Unele)".

Acum să trecem la ultimul grup de funcții - funcții de sortare a matricei. Dar mai întâi, permiteți-mi să vă reamintesc diferența dintre liste și tablouri asociative. Listă este un tablou ai cărui indici sunt numere, care sunt sortate în ordine crescătoare, începând cu 0 . DAR matrice asociativă este un tablou ai cărui indecși sunt, în general, șiruri, care sunt numite chei. De ce este acest lucru atât de important în sortare? Dacă sortați lista, atunci nu contează pentru dvs. că linkul este păstrat: " valoare cheie", deoarece indicii nu servesc la identificarea valorii, ci servesc doar la trimiterea la ea. Și într-o matrice asociativă, legătura este cea care are o importanță capitală: " valoare cheie„, deci trebuie păstrat la sortare.

Să începem simplu: sortarea listelor. Pentru asta există funcțiile sort() și rsort().. Prima funcție sortează matricea în ordine crescătoare, iar a doua în ordine descrescătoare:

$arr = array(15, 12, „Șir”, 40, -2, 0, 12);
sortare($arr);
print_r($arr);
ecou"
";
sortare($arr);
print_r($arr);
?>

Cred că aici totul este clar.

Acum să trecem la funcții de sortare pentru tablouri asociative: fel()și matrice (). Ei fac totul la fel, dar conexiunea" valoare cheie" este salvat:

$arr = array("Nume" => "Tommy", "Vârsta" => "34", "Nivel" => "15");
sortare($arr);
print_r($arr);
ecou"
";
arsort($arr);
print_r($arr);
?>

Acum să luăm în considerare funcţii de sortare după chei ale tablourilor asociative: ksort()și krssort():

$arr = array("Nume" => "Tommy", "Vârsta" => "34", "Nivel" => "15");
xsort($arr);
print_r($arr);
ecou"
";
krssort($arr);
print_r($arr);
?>

Sunt sigur că totul este transparent aici. Și dacă ceva nu este clar, atunci rulați scriptul și analizați rezultatul.

Și, în sfârșit, luați în considerare funcții de sortare personalizate: uasort()și uksort(). Ambele funcții iau doi parametri: o matrice și funcție de sortare personalizată. Funcția sortează matricea după valori și funcția uksort(). sortează o matrice după chei. Ca exemplu, luați în considerare următorul script:

funcția cmp($x, $y) (
dacă ($x == $y) returnează 0;
dacă ($x == 1) returnează 1;
dacă ($y == 1) returnează -1;
dacă ($x > $y) returnează 1;
altfel returnează -1;
}
$arr = matrice("A" => 1, "C" => 3, "B" => 2);
uasort($arr, "cmp");
print_r($arr);
ecou"
";
uksort($arr, "cmp");
print_r($arr);
?>

După cum puteți vedea, am scris propriile noastre reguli de sortare, conform cărora numărul " 1 " este întotdeauna mai mare decât orice altă valoare. Dacă niciunul dintre numere nu este " 1 ", apoi comparăm după regulile obișnuite. Astfel, PHP sortează matricea noastră în funcție de regulile descrise în funcția de comparare, al cărei nume l-am trecut în funcții uasort()și uksort().

Asta e tot principalul funcții pentru diverse manipulări de matrice. Desigur, acest lucru nu este tot ceea ce dezvoltatorii au făcut pentru noi, dar aceste funcții sunt cu adevărat importante și sunt utilizate în mod regulat în practică.

O matrice este o colecție de obiecte care au aceeași dimensiune și tip. Fiecare obiect din matrice este apelat element de matrice. Crearea unei noi matrice în PHP este ușoară. Când se declară o matrice indexată, o pereche de paranteze drepte () este plasată după numele variabilei:

$limbi = „Spaniolă”;

// $limbi = „Spaniolă”

După aceea, pot fi adăugate elemente noi la matrice, așa cum se arată mai jos. Rețineți că elementele noi sunt adăugate fără un index explicit. În acest caz, noul element este adăugat la o poziție egală cu lungimea matricei plus 1:

$languages ​​​​= „Engleză”; // $1languages[l] = „Engleză”;

$languagest ] = „Gaelic”; // $limbi = „Gaelic”;

În plus, pot fi adăugate elemente noi la o anumită poziție în matrice. Pentru a face acest lucru, specificați indexul primului element:

$limbi = „italiană”;

$limbi = „franceză”;

Matricele asociative sunt create într-un mod similar:

$languages["Spain"] = "Spaniolă";

$languages["France"] = "franceză";

Atunci când se creează tablouri, sunt utilizate trei constructe de limbaj standard:

  • matrice();
  • listă();
  • gamă().

Deși toate cele trei cazuri duc la același rezultat - crearea unui tablou, în unele cazuri un construct poate fi preferabil altora. Următoarele sunt descrieri și exemple de utilizare a fiecărui construct.

Funcția array() primește zero sau mai multe elementeși returnează un tablou format din elementele specificate. Sintaxa sa este:

matrice matrice ([element1, element2...])

Probabil array() este doar o notație mai descriptivă pentru crearea unui tablou, folosită pentru comoditatea programatorului. Următorul este un exemplu de utilizare a matricei() pentru a crea o matrice indexată:

$languages ​​​​= array ("Engleză". "Gaelic". "Spaniolă");

// $languages ​​​​= „Engleză”. $limbi = „gaelic”,

// $limbi = „Spaniolă”

Și iată cum se folosește array() când se creează tablouri asociative:

$languages ​​​​= array("Spania" => "Spaniolă",

„Irlanda” => „Gaelic”.

„Statele Unite ale Americii” => „Engleză”);

// $languages["Spain"] = "Spaniolă"

// $languages["Ireland"] = "Gaelic"

// $languages["United States"] = "Engleză"

Matricele asociative sunt utile în special în situațiile în care indicii numerici nu au o corespondență logică. De exemplu, în exemplul anterior, numele țărilor sunt asociate în mod destul de natural cu limbile. Încercați să întruchipezați această legătură logică cu ajutorul numerelor!

Construcția list() este similară cu array(), dar sarcina sa principală este de a atribui simultan valorile preluate din matrice mai multor variabile simultan. Sintaxa comenzii List():

listă nulă(variabilă1 [. variabilă2, ...])

Construcția list() este utilă în special atunci când citiți informații dintr-o bază de date sau fișier. Să presupunem că doriți să formatați și să scoateți datele citite dintr-un fișier text. Fiecare linie a fișierului conține informații despre utilizator (nume,

profesie și culoare preferată); componentele înregistrării sunt separate printr-o bară verticală (|). O linie tipică arată astfel:

Nino Sanzi|Joc de golf profesionist|verde

Cu list(), puteți scrie o buclă simplă care va citi fiecare linie, va atribui componentele acesteia variabilelor și va formata și afișa datele. Lista de mai jos demonstrează capacitatea de a atribui mai multe variabile în același timp folosind list():

while ($line = fgets($user_file.4096)):

// Împărțiți șirul cu funcția split().

// Componentele sunt alocate variabilelor Sname. $ocupaţie şi culoare.

listă ($nume, $ocupație, $culoare) = split("|", $line);

// Formatați și scoateți datele

tipăriți „Nume: Sname
";

print „Ocupație: Ocupație
";

imprimare „Culoarea preferată: Culoare
";

Fiecare linie a fișierului este citită, formatată și scoasă după cum urmează:

Nume: Nino Sanzi

Ocupatie: Golf profesionist

Culoare preferată: verde

În exemplul de mai sus, utilizarea list() depinde de împărțirea șirului în elemente cu funcția split(). Elementele rezultate din împărțire sunt atribuite variabilelor $nume, $ocupație și respectiv $culoare. Apoi totul se rezumă la formatarea datelor pentru ieșire într-un anumit browser. Instrumentele convenabile pentru analiza lexicală a fișierelor text sunt unul dintre punctele forte PHP. Acest subiect este discutat în detaliu în capitolele 7 și 8.

Construcția range() vă permite să creați ușor și rapid o matrice de numere întregi dintr-un interval definit de limitele superioare și inferioare. Range() returnează o matrice formată din toate numerele întregi din intervalul specificat. sintaxa range():

interval de matrice (int low_bound, int upper bound)

Următorul exemplu arată clar cât de convenabilă este această construcție:

$loterie = interval(0,9);

// $loterie = matrice(0,1,2,3,4,5,6,7,8,9)

După cum puteți vedea din fragmentul de mai sus, parametrii range() au fost setați la un interval de la 0 la 9, iar matricea $lotery a fost umplută cu numere întregi din acest interval.

Matrice multidimensionale

În timp, programele dvs. vor deveni mai complexe, iar capacitățile matricelor simple unidimensionale nu vor fi suficiente pentru a stoca informațiile necesare. matrice multidimensională(array of arrays) oferă programatorului mai multe mijloace eficiente pentru stocarea informațiilor care necesită o structurare suplimentară. Este ușor să creați o matrice multidimensională -- adăugați doar o pereche suplimentară de paranteze pătrate pentru a împinge matricea într-o nouă dimensiune:

$tabla de sah = "Rege"; // matrice 2D

$capitals["SUA"] ["Ohio"] = "Columbus": // matrice 2D

$streets["USA"]["Ohio"]["Columbus"] = "Harrison"; // Matrice 3D

Ca exemplu, luați în considerare o matrice care stochează informații despre deserturi și caracteristicile preparării acestora. Ar fi destul de dificil să te descurci cu o matrice unidimensională, dar o matrice bidimensională se potrivește perfect:

$deserturi = matrice(

„Fruit Cup” => matrice (

"calorii" => "scăzut",

„servit” -> „rece”,

"preparare" => "10 minute"

„Brownies” => matrice (

"calorii" -> "mari",

"servit" => "fierbinte",

„pregătire” => „45 de minute”

După crearea unei matrice, elementele sale pot fi accesate prin tastele corespunzătoare:

$deserturi[„Fruit Cup”][“preparation”] // returnează „10 minute”

$deserts["Brownies"]["calorii"] // returnează "high"

Atribuirea valorilor elementelor de tablouri multidimensionale se realizează în același mod ca și în tablourile unidimensionale:

$desserts["Cake"]["calories"] = "prea multe";

// Setează proprietatea „calorii” a obiectului „Prăjitură” la „prea multe”

Deși tablourile multidimensionale introduc noi niveluri de organizare logică a datelor, tablourile multidimensionale sunt create aproape în același mod ca și tablourile unidimensionale. Cu toate acestea, referințele la tablouri multidimensionale din șiruri necesită o atenție specială; secțiunea următoare este dedicată acestui subiect.

Referințe la tablouri multidimensionale

print "Brownie-urile sunt bune, dar conținutul de calorii este".

$deserturi["Brownies"]["calorii"];

print „Brownie-urile sunt bune, dar conținutul de calorii este

($deserturi)";

Observați lipsa ghilimelelor în jurul tastelor. De asemenea, ar trebui să vă amintiți că nu ar trebui să existe spații suplimentare între bretele și legătură. Dacă cel puțin una dintre aceste condiții nu este îndeplinită, va apărea o eroare. Cu toate acestea, ambele metode funcționează. Recomand să alegeți un format și să rămâneți la el, astfel încât programele dvs. să pară mai consistente. În cazul în care un nu folosi oricare dintre aceste metode de formatare, referințele la matrice multidimensionale vor fi interpretate literal, ceea ce va duce cu siguranță la rezultate neașteptate.

Găsirea elementelor de matrice

Găsirea elementelor este una dintre cele mai importante operațiuni cu matrice. PHP are mai multe funcții standard care facilitează găsirea cheilor și valorilor dorite într-o matrice.

Funcția i n_array() verifică dacă elementul dat este prezent în matrice. Dacă căutarea are succes, funcția returnează TRUE, în caz contrar, returnează FALSE. Sintaxa funcției in_array():

bool in_array(element mixt, matrice matrice)

Această funcție este deosebit de convenabilă deoarece nu trebuie să parcurgeți întreaga matrice căutând elementul dorit. În următorul exemplu, funcția in_array() caută elementul „rus” în matricea $languages:

$languages ​​​​= array(„engleză”, „gaelic”, „spaniolă”):

$exists = in_array("rusa", $limbi); // $exists este setat la FALSE

$exists = in_array(„Engleză”, $limbi): // $exists este setat la TRUE

Funcția in_array() apare adesea în constructele de control atunci când valoarea returnată (TRUE/FALSE) este folosită pentru a selecta una dintre cele două opțiuni de continuare. Următorul exemplu utilizează funcția in_array() pentru a selecta una dintre cele două opțiuni într-o instrucțiune condițională if:

// Intrarea utilizatorului

$limba = „franceză”; $email = " [email protected]";

// Dacă limba este prezentă în matrice

if (in_array($limba. $limbi)):

// Abonați utilizatorul la newsletter.

// Rețineți că PHP nu are o funcție standard numită

// subscribe_user(). În acest exemplu, această funcție pur și simplu simulează

// procesul de abonare.

subscribe_user($email, $limba);

print "Acum sunteți abonat la ediția $language a buletinului informativ.";

// Limba nu este în matrice

print „Ne pare rău, dar nu oferim încă o ediție în $limbă a buletinului informativ”.

Ce se întâmplă în acest exemplu? Să presupunem că variabilele $language și $email conțin date introduse de utilizator. Doriți să vă asigurați că limba specificată este acceptată de sistemul dumneavoastră și să utilizați funcția in_array() în acest scop. Dacă numele limbii este prezent în matrice, utilizatorul se abonează la newsletter și primește mesajul corespunzător. LA in caz contrar programul informează că buletinul nu este distribuit în limba specificată. Desigur, într-un program real, utilizatorul nu trebuie să ghicească ce limbi sunt acceptate de programul dumneavoastră. Problema este rezolvată folosind o listă derulantă, un subiect tratat în detaliu în Capitolul 10. Aici, acest exemplu doar demonstrează posibilitățile de lucru cu matrice.

Funcția array_keys() returnează o matrice care conține toate cheile matricei originale transmise ca parametru. Dacă parametrul opțional search_item este transmis în apel, numai cheile care se potrivesc valoarea stabilită; în caz contrar, toate cheile matricei sunt returnate. Sintaxa funcției array_keys() este:

matrice array_keys (matrice matrice [, element de căutare mixt])

Luați în considerare un exemplu de utilizare a funcției array_keys() pentru a obține cheia unui element dat:

$great_wines = matrice ("Australia" => "Clarendon Hills 96",

„Franța” => „Comte George de Vogue 97”,

"Austria" => "Feiler Artinger 97");

$great_labels = array_keys($great_wines);

// $great_labels = array("Australia", "Franța", "Austria");

$great_labels = array_keys($great_wines, "Clarendon Hills 96");

// $great_labels = array("Australia");

Funcția array_keys() face foarte ușor să obțineți toate cheile unui tablou asociativ -- de exemplu, în cazul precedent, acestea erau numele țărilor în care sunt produse diferite vinuri.

Funcția array_values() returnează o matrice formată din toate valorile matricei originale transmise ca parametru. Sintaxa funcției array_values() este:

array array_values(matrice matrice)

Să ne întoarcem la exemplul anterior în care funcția array_keys() a fost folosită pentru a obține toate valorile cheilor. De data aceasta, funcția array_values() returnează toate valorile corespunzătoare cheilor:

// $great_wines = array("Australia" => "Clarendon Hills 96",

// "Franța" => "Comte George de Vogue 97",

// "Austria" => "Feiler Artinger 97");

$great_labels = array_values($great_wines);

// $great_labels = array("Clarendon Hills 96",

// „Comte George de Vogue 97”,

// „Feiler Artinger 97”);

Funcțiile array_keys() și array_values() se completează reciproc, permițând, dacă este necesar, obținerea tuturor componentelor unei părți sau alteia ale tabloului asociativ.

Adăugarea și eliminarea articolelor

Din fericire, în PHP, nu trebuie să specificați un număr maxim de elemente atunci când creați o matrice. Acest lucru vă oferă mai multă libertate cu operațiunile cu matrice, deoarece nu trebuie să vă faceți griji cu privire la depășirea accidentală a matricei dacă numărul de elemente depășește un prag așteptat. PHP are mai multe funcții pentru creșterea dimensiunii unui tablou. Unele dintre ele au fost create pentru confortul programatorilor care sunt obișnuiți să lucreze cu tipuri variate cozi și stive (FIFO, FILO etc.), care se reflectă în numele funcțiilor (push, pop, shift și unshift). Dar chiar dacă nu știți ce este o „coadă” sau „stivă”, nu vă faceți griji - nu este nimic complicat în legătură cu aceste funcții.

O coadă este o structură de date din care elementele sunt preluate în ordinea sosirii. O stivă este o structură de date din care elementele sunt preluate în ordinea inversă sosirii lor.

Funcția array_push() adaugă (adică se adaugă la sfârșitul matricei) unul sau mai multe elemente noi. Sintaxa funcției array_push() este:

int array_push(matrice matrice, element mixt [, ...])

Lungimea unui tablou crește direct proporțional cu numărul elementelor sale. Acest lucru este demonstrat în următorul exemplu:

$limbi = array(„spaniolă”, „engleză”, „franceză”);

array_push($limbi, „rusă”, „germană”, „gaelic”);

// $languages ​​​​= array ("spaniolă", "engleză", "franceză",

// „rusă”, „germană”, „gaelic”)

Funcția array_push(), la fel ca multe funcții PHP standard, are un „dublu” - funcția array_pop(), concepută pentru a extrage elemente dintr-o matrice. Principala diferență dintre aceste funcții este că array_push() poate adăuga mai multe elemente simultan, în timp ce array_push() elimină doar elementele pe rând.

array_pop()

Rezultatul funcției array_push() este exact opusul array_push() -- această funcție extrage (adică elimină) ultimul element din matrice. Elementul preluat este returnat de funcție. Sintaxa funcției Arrow_pop():

array_pop(matrice matrice)

De fiecare dată când array_pop() este executat, dimensiunea matricei este redusă cu 1. Luați în considerare următorul exemplu:

$languages ​​​​= array(„spaniolă”, „engleză”, „franceză”,

„rusă”, „germană”, „gaelic”);

$a_language = array_pop($languages): // $a_language = "Gaelic"

$a_language = array_pop($languages): // $a_language = "Germană"

// $limbi = matrice ("spaniolă", "engleză", "franceză", "rusă");

Funcțiile array_push() și array_pop() sunt convenabile prin faptul că puteți efectua operații cu elemente și puteți controla dimensiunea unui tablou fără să vă faceți griji pentru elementele neinițializate sau goale. Această soluție funcționează mult mai eficient decât orice încercare de a controla acești factori din partea programatorului.

Funcția array_shift() este similară cu array_pop() cu o diferență: elementul este eliminat de la începutul (marginea din stânga) a tabloului. Toate celelalte elemente ale matricei sunt deplasate cu o poziție la începutul matricei. Funcția array_shift() are aceeași sintaxă ca și array_pop():

array_shift(matrice matrice)

Când lucrați cu funcția array_shift(), rețineți că elementele sunt eliminate de la începutul matricei, așa cum arată următorul exemplu:

$languages ​​​​= array(„spaniolă”, „engleză”, „franceză”, „rusă”);

$a_limba = array_shift($limbi); // $a_language = "Spaniolă";

// $limbi = matrice(„engleză”, „franceză”, „rusă”);

Funcția array_unshift() completează array_shift() -- noul element este inserat la începutul matricei, iar elementele rămase sunt deplasate cu o poziție spre dreapta. Sintaxa comenzii array_unshift() este:

1nt array_unshift(matrice matrice, variabilă mixtă1 [....variabilă2])

Cu un apel de funcție, puteți adăuga atât unul cât și mai multe elemente, în timp ce dimensiunea matricei crește proporțional cu numărul de elemente adăugate. Un exemplu de adăugare a mai multor elemente:

$limbi = array(„franceză”, „italiană”, „spaniolă”);

array_unshift($limbi, „rusă”, „swahili”, „chineză”);

// $limbi = matrice(„rusă”, „swahili”, „chineză”,

// „franceză”, „italiană”, „spaniolă”);

Funcția array_pad() vă permite să creșteți rapid o matrice la dimensiunea dorită prin completarea acesteia cu elemente standard. Sintaxa funcției array_pad() este:

array arrap_pad (matrice matrice, dimensiune int, valoare mixtă):

Parametru marimea definește noua lungime a matricei. Parametru sens specifică valoarea implicită atribuită elementelor la toate pozițiile noi din matrice. Există câteva lucruri de reținut când utilizați array_pad() :

În cazul în care un marimea este pozitivă, matricea este căptușită în partea dreaptă, iar dacă este negativă, matricea este căptușită în stânga.

Dacă valoarea absolută a parametrului marimea mai mică sau egală cu lungimea matricei, nu se întreprinde nicio acțiune.

Valoarea absolută (modulul) a unui număr întreg este valoarea sa fără semn. De exemplu, valoarea absolută a numerelor 5 și -5 este 5.

Un exemplu de adăugare a unui tablou de la sfârșit:

$greutăți = array_pad($greutăți. 10, 100);

// Rezultat: $weights = array(1, 3, 5, 10, 15, 25, 50, 100, 100, 100);

Un exemplu de adăugare a unei matrice de la început:

$greutăți = matrice(1, 3, 5, 10, 15, 25, 50);

$greutăți = array_pad($greutăți, -10, 100);

// Rezultat: $weights = array(100, 100, 100, 1, 3, 5, 10, 15, 25, 50);

Încercarea incorectă de a finaliza o matrice:

$greutăți = matrice(1, 3, 5, 10, 15, 25, 50);

$greutăți = array_pad($weighttits, 3, 100);

// Tabloul $weights nu se modifică:

// $greutăți = array(1, 3, 5, 10, 15, 25, 50);

Iterarea peste elemente

PHP are mai multe funcții standard pentru iterare peste elementele unui tablou. Împreună, aceste funcții oferă un mijloc flexibil și convenabil pentru procesarea și afișarea rapidă a conținutului matricelor. Probabil că veți folosi adesea aceste funcții, deoarece ele sunt baza aproape a tuturor algoritmilor de manipulare a matricei.

Funcția reset() resetează pointerul intern la poziția curentă din matrice la primul element. De asemenea, returnează valoarea primului element. Sintaxa funcției reset() este:

resetare mixtă (matrice matrice)

Luați în considerare următoarea matrice:

$fructe = array("mere", "portocale", "banana");

Să presupunem că indicatorul către poziția curentă din această matrice este setat la elementul „portocaliu”. Echipă:

$a_fruct = reset($fructe);

va returna un pointer la începutul matricei, adică elementul „măr” și va returna acea valoare dacă rezultatul apelului reset() este folosit în program. De asemenea, este posibilă o versiune simplificată a apelului:

În acest caz, pointerul sare la primul element al matricei, iar valoarea returnată nu este utilizată.

Funcția each() efectuează două operații de fiecare dată când este apelată: returnează perechea cheie/valoare la care face referire indicatorul de poziție curentă și avansează pointerul la următorul element. Sintaxa pentru funcția each() este:

matrice fiecare (matrice matrice)

Pentru comoditate, each() returnează cheia și valoarea ca o matrice de patru elemente; cheile acestui tablou sunt 0, 1, valoare și cheie. Tasta return este asociată cu tastele 0 și cheia, iar valoarea returnată este asociată cu tastele 1 și valoare.

În exemplul următor, funcția each() returnează elementul în poziția curentă:

// Declara o matrice de cinci elemente

$condimente = array("patrunjel", "salvie", "rozmarin", "cimbru", "piper");

// Setați pointerul la primul element al matricei

// Creați o matrice $a_sp1ce. din patru piese

$a_condiment = fiecare($condiment);

Ca rezultat al executării fragmentului de mai sus, matricea $a_spice va conține următoarele perechi cheie/valoare:

  • 0 => 0;
  • 1 => „pătrunjel”;
  • cheie => 0;
  • valoare => „pătrunjel”.

După aceea, șirul „pătrunjel” poate fi scos prin oricare dintre următoarele comenzi:

print $a_spice: print $a_spice["valoare"];

Funcția each() este de obicei folosită împreună cu list() în bucle de construcție pentru a repeta peste toate sau unele dintre elementele dintr-o matrice. La fiecare iterație, each() returnează fie următoarea pereche cheie/valoare, fie boolean false când este atins ultimul element al matricei. Să revenim la matricea $spices; pentru a afișa toate elementele pe ecran, puteți folosi următorul script:

// Resetează indicatorul de poziție curentă

// Iterează peste perechi cheie/valoare, limitând rezultatul la valoare

while (listă ($cheie, $val) = fiecare ($condimente)):

tipăriți „$val
"

Mai jos este un exemplu mai interesant de utilizare a fiecărei funcții() în combinație cu celelalte funcții descrise în acest capitol. Lista 5.1 arată cum să utilizați aceste funcții pentru a afișa un tabel formatat de țări și limbi.

Lista 5.1. Construirea unui tabel HTML din conținutul unui tablou

// Declarați o matrice asociativă de țări și limbi $languages ​​​​= matrice ("Țara" => "Limba",

„Spania” => „Spaniolă”,

„SUA” => „Engleză”,

„Franța” => „franceză”,

„Rusia” => „Rusă”);

// Începe un nou tabel

imprimare"

";

// Mută ​​indicatorul în poziția primului element

$hdl = cheie($limbi);

shd2 = $limbi[$hd1];

// Afișează prima cheie și prima element ca antete de tabel

imprimare"

";

următorul($limbi);

// Afișează rânduri de tabel cu chei și elemente de matrice

while (listă ($ctry,$lang) = fiecare ($limbi)):

imprimare"

";

// Terminați tipărirea tabelului "

$hd1$hd2
Sctry$lang
";

Acest cod va produce următorul tabel HTML.

Țară

limba

Spania Spaniolă
STATELE UNITE ALE AMERICII Engleză
Franţa limba franceza
Rusia Rusă

Acest exemplu oferă o idee despre cea mai mare putere a PHP - capacitatea de a combina codul dinamic cu HTML pentru a obține o vizualizare vizuală, formatată a datelor care au fost citite.

Funcția end() mută indicatorul la poziția ultimului element din matrice. Sintaxa funcției end() este:

sfârșit (matrice de matrice)

Funcția next() avansează indicatorul cu o poziție înainte și apoi returnează elementul la Pozitie noua. Dacă ca urmare a deplasării

pointerul va merge dincolo de matrice, next() returnează false. Sintaxa funcției next():

mixt next (matrice matrice)

Dezavantajul funcției next() este că false este returnat și pentru elementele de matrice existente, dar goale. Dacă doriți să faceți o iterație normală, utilizați funcția each().

Funcția prev() este similară cu next() cu o excepție: pointerul este mutat cu o poziție la începutul matricei, după care elementul din noua poziție este returnat. Dacă offset-ul face ca indicatorul să fie înaintea primului element al matricei, prev() va returna false. Sintaxa funcției prev():

mixt prev (matrice matrice)

Dezavantajul funcției prev() este că false este returnat și pentru elementele de matrice existente, dar goale. Dacă doriți să faceți o iterație normală, utilizați funcția each().

Funcția array_walk() vă permite să aplicați o funcție la mai multe (sau eventual la toate) elementele unui tablou. Sintaxa funcției array_walk() este:

int array_walk(matrice matrice, șir nume_funcție [, date mixte])

Funcția specificată de parametrul function_name poate fi utilizată în diverse scopuri, cum ar fi căutarea elementelor cu anumite caracteristici sau modificarea conținutului unui tablou. În tablourile asociative, function_name trebuie să ia cel puțin doi parametri, un element de matrice și o cheie. Dacă sunt furnizate date opționale ale celui de-al treilea parametru, acestea devin al treilea parametru. Următorul exemplu utilizează funcția array_walk() pentru a elimina duplicatele dintr-o matrice:

funcția delete_dupes($element) (

static $last=""; dacă ($element == $ultimul)

unset($element); altfel . ""

$emails = matrice(" [email protected]", "[email protected]", "[email protected]");

array_walk($emails,"delete_dupes");

// $emails = array(" [email protected]", "[email protected]");

Funcția array_reverse() facilitează trecerea în ordinea opusă a elementelor care alcătuiesc o matrice. Sintaxa funcției array_reverse() este:

matrice array_reverse(matrice matrice)

Luați în considerare un exemplu de utilizare a funcției array_reverse():

$us_wireproducers = array("California", "Oregon", "New York". "Washington");

$us_wine_producers - array_reverse(Sus_wine_producers);

// $us_wine_producers = array("Washington". "New York", "Oregon". "California");

Când array_reverse() este apelat pe un tablou asociativ, perechile cheie/valoare sunt păstrate, doar ordinea elementelor matricei este schimbată.

Funcția array_flip() schimbă cheile și valorile elementelor matricei. Sintaxa funcției array_flip() este:

matrice array_flip(matrice matrice)

În exemplul următor, funcția array_flip() răstoarnă toate cheile și valorile elementelor:

$languages ​​​​= array("Spania" => "Spaniolă", "Franța" => "franceză", "Italia" => "italiană");

$limbi = array_flip($limbi);

// $languages ​​​​= array("spaniolă" => "Spania", // "franceză" => "Franța", // "italiană" => "Italia");

Amintiți-vă: funcția array_flip(). nu se schimba ordinea elementelor matricei. Funcția array_reverse() este utilizată în acest scop.

Dimensiunea matricei

Cunoașterea dimensiunii curente a unei matrice poate îmbunătăți adesea eficiența unui script. Probabil că dimensiunea unei matrice este folosită cel mai des atunci când se repetă elemente:

$us_wine_producers = array("Washington". "New York", "Oregon", "California");

pentru (Si = 0; Si< sizeof ($us_wine_producers); $i++) :

printează „$us_wine_producers[$i]”;

Deoarece tabloul $us_wine_producers este indexat prin numere întregi, putem folosi o buclă for pentru a trece prin variabila contor ($i) și a scoate fiecare element din matrice.

Funcția sizeof() returnează numărul de elemente dintr-o matrice. Sintaxa funcției sizeof() este:

int sizeof (matrice matrice)

Este probabil ca funcția sizeof() să fie găsită frecvent în aplicațiile dvs. web. Mai jos este un exemplu scurt de utilizare a acestuia (apropo, exemplul anterior este, de asemenea, una dintre utilizările standard ale sizeof ()):

$pasta = array("papioane", "par de inger", "rigatoni");

$paste_size = dimensiunea($paste);

// $pasta_size = 3

Funcția sizeof() are și o formă extinsă, count() (vezi mai jos).

Funcția count() efectuează aceeași operație ca sizeof() -- returnează numărul de valori conținute în matrice. Sintaxa funcției count() este:

număr de int (variabilă mixtă)

Singura diferență dintre sizeof() și count() este că count() returnează informații suplimentare în unele situații:

  • dacă variabila există și este o matrice, count() returnează numărul de elemente din matrice;
  • dacă variabila există, dar nu este o matrice, funcția returnează 1;
  • dacă variabila nu există, se returnează valoarea 0.

array_count_values()

Funcția array_count_values() este o variație a sizeof() și count(). În loc de numărul total de elemente, numără numărul de instanțe ale fiecărei valori din matrice. Sintaxa funcției array_count_values() este:

matrice array_count_values(matrice matrice):

În matricea returnată, cheile vor fi valorile matricei originale, iar valorile vor fi frecvențele lor:

$state = array("OH", "OK", "CA", "RA", "OH", "OH", "RA", "AK");

$state_freq = array_count_values($state);

Tabloul $state_freq este populat cu următoarele perechi asociative cheie/valoare:

$state_freq = matrice("OH" => 3, "OK" => 1, "CA" => 1, "RA" => 2, "AK" => 1);

Sortarea matricelor

Sortarea ocupă un loc important în programare și se găsește adesea în practică în aplicațiile de internet precum site-urile comerciale (sortarea categoriilor de produse în ordine alfabetică, sortarea prețurilor) sau motoarele de căutare (sortarea programelor după numărul de descărcări). Există nouă funcții de sortare standard în PHP (Tabelul 5.1), fiecare funcție sortând o matrice într-un mod specific.

Tabelul 5.1. Funcții de sortare

Triere

Ordine inversă

Stocarea perechilor cheie/valoare

Sens

Sens

Sens

Sens

Sens

Sens

Se referă la utilizarea funcțiilor de sortare personalizate atunci când ordinea de sortare a unui tablou depinde de rezultatele returnate de funcția personalizată.

Sortarea elementelor matricei nu se limitează la criterii standard, deoarece trei funcții (usort(), uasort() și uksort()) vă permit să setați un criteriu personalizat și să sortați informațiile într-un mod arbitrar.

Cea mai simplă funcție sort() sortează elementele unui tablou în ordine crescătoare (de la cel mai mic la cel mai mare). Sintaxa funcției sort() este:

void sort (matrice matrice)

Elementele nenumerice sunt sortate alfabetic în funcție de codurile lor ASCII. Următorul exemplu demonstrează utilizarea funcției sort() la sortare:

// Creați o serie de orașe.

// Sortați orașele în ordine crescătoare

// Buclă prin conținutul matricei și scoate toate perechile cheie/valoare.

pentru (resetare($orașe); $key = cheie ($orașe); următorul ($orașe)):

print("orase[$cheie] = $orase[$cheie]
";

Acest fragment produce următorul rezultat:

citys = Aprilia

oraşe = Nettuno

orașe = Venezia

După cum puteți vedea, matricea $cities este sortată alfabetic. O variantă a acestei metode de sortare este implementată în funcția asort(), descrisă mai jos.

Funcția rsort() funcționează exact ca și funcția sort(), cu o singură excepție: elementele unui tablou sunt sortate în ordine inversă. Sintaxa funcției rsort():

void rsort (matrice matrice)

Să revenim la matricea $cities din exemplul anterior:

$cities array("Aprilia", "Nettuno", "Roma", "Venezia", ​​​​"Anzio");

orașe = Venezia

oraşe = Nettuno

citys = Aprilia

Matricea $cities este de asemenea sortată, dar de data aceasta în ordine alfabetică inversă. O variantă a acestei metode de sortare este implementată în funcția arsort(), descrisă mai jos.

Funcția asort() funcționează în același mod ca și funcția sort() menționată mai sus, dar păstrează asocierea inițială a indicilor cu elemente, indiferent de noua ordine a elementelor. Sintaxa funcției asort() este:

void asort (matrice matrice)

Să revenim la matricea $cities:

$cities = array("Aprilia", "Nettuno", "Roma", "Venezia", ​​​​"Anzio");

Sortarea matricei $cities cu rsort() va avea ca rezultat sortarea elementelor în următoarea ordine:

citys = Aprilia

oraşe = Nettuno

orașe = Venezia

Fiți atenți la indecși și comparați-i cu cei din descrierea funcției sort(). Aceasta este diferența dintre cele două funcții.

Funcția arsort() este o variație a lui asort() care păstrează asocierea indexului original, dar sortează elementele în ordine inversă. Sintaxa funcției arsort() este:

void array (matrice matrice)

Să folosim funcția arsort() pentru a sorta matricea $cities:

$cities = array("Aprilia", "Nettuno", "Roma", "Venezia", ​​​​"Anzio");

array($orase);

orașe = Venezia

orașe[l] = Nettuno

citys = Aprilia

Acordați atenție indicilor și comparați-i cu cei dați în descrierea funcției rsort(). Aceasta este diferența dintre cele două funcții.

Funcția ksort() sortează o matrice după chei, păstrând asocierile originale cheie-valoare. Sintaxa funcției ksort() este:

void ksort (matrice matrice)

De exemplu, luați în considerare o matrice care este ușor diferită de matricea originală

$wine_producers = array("America" ​​=> "Napa Valley",

„Italia” => „Toscana”,

„Australia” => „Ruthgerlen”,

„Franța” => „Loira”,

„Chile” => „Valea Rapel”);

Ca rezultat al sortării unui tablou cu funcția ksort(), elementele vor fi aranjate în următoarea ordine:

„America” ​​ => „Valea Napa”

„Australia” => „Ruthgerlen”

„Chile” => „Valea Rapel”

„Franța” => „Loira”

„Italia” => „Toscana”

Comparați cu rezultatele sortării $wine_producers cu funcția sort():

„America” ​​ => „Valea Napa”

„Australia” => „Toscana”

„Chile” => „Ruthgerlen”

„Franța” => „Loira”

„Italia” => „Valea Rapel”

Mai mult decât un rezultat îndoielnic!

Funcția krsort() este aproape aceeași cu ksort(), dar cheile sunt sortate în ordine inversă. Sintaxa funcției krsort():

void krsort (matrice $array)

Luați în considerare sortarea matricei $wi reproducers cu funcția krsort():

$wine_producers = array("America" ​​=> "Napa Valley",

„Italia” => „Toscana”,

„Australia” => „Ruthgerlen”,

„Franța” => „Loira”.

„Chile” => „Valea Rapel”);

krssort($producători_vin);

Ca urmare a sortării, elementele vor fi aranjate în următoarea ordine:

„Italia” => „Toscana”

„Franța” => „Loira”

„Chile” => „Valea Rapel”

„Australia” => „Ruthgerlen”

„America” => „Valea Napa”

Probabil, funcțiile de sortare descrise mai sus vor fi suficiente pentru majoritatea cazurilor. Cu toate acestea, în unele situații poate fi necesar să definiți propriile criterii de sortare. PHP implementează această capacitate în trei funcții standard: usort(), uasort() și uksort().

Funcția usort() face posibilă sortarea unui tablou pe baza unui criteriu definit de programator. Pentru a face acest lucru, usort() ia ca parametru numele funcției care determină ordinea de sortare. Sintaxa funcției Usort():

void usort(array array, string function_name)

Parametrul matrice este numele matricei de sortat, iar parametrul nume_funcție este numele funcției pe baza căreia va fi efectuată sortarea. Să presupunem că aveți o listă lungă de nume grecești pe care trebuie să le învățați pentru viitorul examen de istorie. Vrei să sortezi cuvintele după lungime, începând cu cele mai lungi și apoi învățându-le pe cele scurte când obosești. Puteți folosi funcția usort() pentru a sorta o matrice după lungime.

Lista 5.2. Definirea unui criteriu de sortare pentru funcția usort().

$vocab = array("Socrate", "Aristofan", "Platon", "Eschil", "Thesmophoriazusae");

funcția compare_length($str1, $str2) (

// Obțineți lungimea următoarelor două cuvinte

$lungime1 = strlen($str1);

$lungime2 = strlen($str2);

// Determinați care șir este mai scurt

dacă ($lungime1 == $lungime2):

elseif ($lungime1< $length2) :

// Apelați usort() cu compare_length()

// ca criterii de sortare

usort($vocab, "compare_length"):

// Ieșire listă sortată

while (listă ($cheie, $val) = fiecare ($vocab)) (

ecou „$val
";

În Lista 5.2, funcția compare_length() definește criteriile pentru sortarea unui tablou. LA acest caz aceasta se face prin compararea lungimii elementelor trecute. Funcția de criteriu trebuie să primească doi parametri reprezentând

elemente de matrice comparate. De asemenea, rețineți cum aceste elemente sunt transferate implicit funcției de criterii atunci când este apelată usort() și cum toate elementele sunt comparate automat de această funcție.

Funcțiile uasort() și uksort() sunt variante ale usort() cu aceeași sintaxă. Funcția uasort() sortează o matrice în funcție de un criteriu definit de utilizator, păstrând asocierile cheie/valoare. Funcția uksort() sortează și matricea în funcție de un criteriu personalizat, dar cheile nu sunt sortate după valori.

Alte caracteristici utile

Această secțiune descrie unele funcții care nu aparțin unei anumite secțiuni, dar sunt de un beneficiu incontestabil.

Funcția arrayjnerge() îmbină de la 1 la N tablouri, concatenându-le în ordinea parametrilor. Sintaxa funcției array_merge():

matrice array_merge(matrice matrice1, matrice matrice2, ..., matrice matriceN]

Luați în considerare un exemplu de unire simplă a matricei folosind funcția arrayjnerge();

$arr_1 = array("capsuni", "struguri", "lamaie");

$arr_2 = array("banana", "cacao", "lai");

$arr_3 = array("piersică", "orange");

$arr_4 = array_merge($arr2, $arr_1, $arr_3):

// $arr_4 = array("banana", "cacao", "lai", "capsuni", "struguri", "lamaie", "piersici", "portocale");

Funcția array_slice() returnează o porțiune dintr-o matrice ale cărei poziții de început și de sfârșit sunt date de un offset față de început și un parametru opțional de lungime. Sintaxa funcției array_slice() este:

array array_slice(array array, int offset [, int lungime])

  • Dacă offset-ul este pozitiv, poziția de pornire a fragmentului returnat este numărată de la începutul matricei.
  • Dacă offset-ul este negativ, poziția de pornire a fragmentului returnat este numărată de la sfârșitul matricei.
  • Dacă nu este specificată nicio lungime, tabloul returnat include toate elementele de la poziția de început până la sfârșitul matricei.
  • Dacă este specificată o lungime pozitivă, fragmentul returnat este format din cantitate dată elemente.
  • Dacă este specificată o lungime negativă, fragmentul returnat încheie numărul specificat de elemente de la sfârșitul matricei.

Funcția array_spl ice() este oarecum similară cu array_slice() -- înlocuiește porțiunea matricei, specificată de poziția de pornire și lungimea opțională, cu elementele parametrului opțional de matrice. Sintaxa funcției array_splice() este:

array_splice(array input_array, int offset, , );

Valorile parametrilor sunt stabilite în conformitate cu anumite reguli:

  • Dacă offset-ul este pozitiv, poziția de pornire a primului element care trebuie eliminat este numărată de la începutul matricei.
  • Dacă offset-ul este negativ, poziția de pornire a primului element care trebuie eliminat este numărată de la sfârșitul matricei.
  • Dacă nu este specificată nicio lungime, toate elementele de la poziția de început până la sfârșitul matricei sunt eliminate.
  • Dacă este specificată o lungime pozitivă, fragmentul care trebuie eliminat constă din numărul specificat de elemente.
  • Dacă este specificată o lungime negativă, elementele sunt eliminate din matrice de la poziția de început până la poziția la distanța specificată de la sfârșitul matricei.
  • Dacă replacement_array nu este specificat, atunci elementele specificate prin offset și lungimea opțională sunt eliminate din matrice.
  • Dacă este specificat un replacement_array, acesta trebuie să fie inclus într-o construcție array() (dacă conține mai mult de un element).

Să ne uităm la câteva exemple care demonstrează clar capacitățile acestei funcții. Aceste exemple vor folosi matricea $pasta (vezi mai sus) pe care vor fi efectuate diverse operații.

Eliminarea tuturor elementelor din poziția a cincea până la sfârșitul matricei:

$paste = array_splice($paste, 5);

Eliminarea celui de-al cincilea și al șaselea element:

$paste = array_splice($paste. 5, 2);

Înlocuirea celui de-al cincilea și al șaselea element cu valori noi:

$paste = array_splice($paste, 5, 2, array("element1", "element2"));

Eliminarea tuturor elementelor de la al cincilea la al treilea element de la sfârșitul matricei:

$paste = array_splice($paste, 5, -3);

După cum puteți vedea din exemplele de mai sus, funcția array_splice() oferă flexibilitate eliminarea elementelor dintr-o matrice cu o cantitate minimă de cod.

Funcția shuffle() sortează elementele unui tablou în ordine aleatorie. Sintaxa funcției shuffle() este:

void shuffle (array array);

Rezultate

Acest capitol a acoperit matrice și standard Funcții PHP pentru a lucra cu matrice. În special, au fost abordate următoarele subiecte:

  • crearea de tablouri indexate și asociative;
  • tablouri multidimensionale;
  • afișarea conținutului rețelelor multidimensionale;
  • căutarea elementelor;
  • adăugarea și îndepărtarea elementelor;
  • dimensiunea matricei;
  • triere;
  • alte caracteristici utile pentru a lucra cu matrice.

Matricele sunt instrumente foarte convenabile și versatile pentru lucrul cu date în aplicațiile web. În exemplele din capitolele ulterioare, matricele vor fi utilizate în mod repetat pentru a îmbunătăți eficiența și claritatea codului.

În capitolul 6, vom continua introducerea în caracteristicile de bază ale PHP. De data aceasta ne vom concentra pe caracteristicile orientate pe obiecte ale limbajului.

Am învățat elementele de bază ale lucrului cu matrice, acum înțelegeți ce este o matrice, ce este un ciclu și chiar am implementat câteva dintre funcțiile noastre pentru a lucra cu matrice. Acum sunteți gata să obțineți deja cunoștințe despre funcții gata făcute pentru a lucra cu matrice în PHP.

În acest plan bibliotecă standard funcții ne oferă o selecție largă, pentru aproape toate ocaziile. În această lecție, voi încerca să vă povestesc despre funcțiile cu care eu personal trebuie să lucrez zilnic. În opinia mea, toată dezvoltarea web în PHP arată plus/minus la fel, iar majoritatea dezvoltatorilor trebuie să lucreze cu aceleași caracteristici. Deci, funcțiile de lucru cu matrice în PHP, enumerate în acest articol, vă vor fi utile cu o probabilitate foarte mare. Deci, să vedem ce sarcini trebuie să rezolvăm cel mai adesea când lucrăm cu matrice.

Verificarea existenței unei chei într-o matrice

Adesea nu știm dacă există vreo cheie în matrice. Și dacă încercăm să accesăm printr-o cheie care nu se află în matrice, va apărea o eroare. Cel mai simplu exemplu.

Curs PHP pentru începători.

Ca rezultat, așa cum era de așteptat - o eroare.

Pentru a evita o astfel de situație, ar trebui să verificați dacă o astfel de cheie se află sau nu în matrice. Există o funcție array_key_exists($key, $array) pentru aceasta. Ia o cheie ca prim argument și o matrice ca al doilea argument, în care prezența sa trebuie verificată. Returnează true dacă este găsită cheia, false în caz contrar. Utilizarea arată așa.

Codul este disponibil numai după achiziționarea cursului PHP pentru începători.

Rezultat:

Verificarea dacă există o valoare

Nu mai puțin des trebuie să aflați dacă există o valoare în matrice. De exemplu, vrem să știm dacă numărul 7 este într-o matrice. După cum ne amintim, în ultima lecție am scris o funcție pentru aceasta. Cu toate acestea, în codificarea reală, în cea mai mare parte, trebuie să folosiți cele gata făcute. Această funcție se numește in_array($needle, $array). Aici $needle este ceea ce căutăm, $array este matricea pe care o căutăm. Returnează adevărat dacă valoarea este găsită și fals dacă nu. Aplicația sa arată astfel:

Codul este disponibil numai după achiziționarea cursului PHP pentru începători.

Unirea matricelor

Foarte des este necesar să îmbinați 2 matrice într-una singură. Există o funcție array_merge($array1, $array2) pentru aceasta. Ca argumente, după cum înțelegeți, matricele sunt transmise acestei funcție, care trebuie combinate. Această funcție returnează tabloul rezultat.

Codul este disponibil numai după achiziționarea cursului PHP pentru începători.

Rezultat:

Vă rugăm să rețineți că, dacă tastele sunt șiruri, atunci comportamentul funcției va fi ușor diferit. Dacă cheile șir din $array2 se intersectează cu cheile din $array1, atunci numai valorile din $array2 vor fi incluse în rezultat pentru cheile care se intersectează. Ei vor suprascrie, parcă, ceea ce era în prima matrice.

Codul este disponibil numai după achiziționarea cursului PHP pentru începători.

Rezultatul va fi următorul:

Acest lucru poate fi util atunci când trebuie să actualizăm o parte a unor date dintr-o matrice. Ca și în exemplul de mai sus - am actualizat parola, lăsând autentificarea aceeași.

Alte caracteristici

Există o mulțime de funcții pentru lucrul cu matrice în PHP. Iar restul le vei găsi pe site-ul de documentație PHP.
DAR teme pentru acasă te va ajuta cu asta.

Dacă această lecție ți-a fost utilă, spune-le prietenilor tăi despre acest curs sau distribuie un link către el pe rețelele sociale.

O matrice este o colecție de variabile indexate și legate între ele într-o singură super variabilă, ușor accesibilă și referită, care oferă o modalitate convenabilă de a schimba mai multe valori simultan între linii de cod, funcții și chiar pagini. Acest articol oferă o prezentare generală dispozitiv intern matrice și descrie toate funcțiile PHP încorporate pentru manipularea matricelor. Dar înainte de a aborda acest subiect în profunzime, merită să ne uităm la cele mai comune utilizări ale matricelor în codul PHP real.

Multe dintre variabilele de mediu încorporate ale PHP sunt reprezentate ca matrice (un exemplu ar fi matricea $_SESSION, care conține toate numele și valorile variabilelor propagate de la o pagină la alta folosind mecanismul de sesiune PHP). Pentru a accesa aceste variabile, trebuie să știi cel puțin cum să accesezi matrice.

Tablouri asociative și tablouri cu indici numerici

Matricele cu indici numerici folosesc numere ca valori de index, în timp ce tablourile asociative folosesc șiruri. În tablourile asociative, fiecărui element nou trebuie să i se atribuie un index de șir unic. Matricele cu indici numerici vă permit să adăugați pur și simplu un element, iar PHP îi va atribui automat primul număr liber începând de la 0 ca index. Ambele tipuri de matrice vă permit să adăugați elemente noi pe rând. Matricele asociative sunt excelente pentru stocarea informațiilor despre setări, deoarece cheile lor pot stoca informații semnificative.

Fiți atenți: majoritatea oamenilor nu încep să numere de la 0, ci de la 1. Prin distragere a atenției, vă puteți referi cu ușurință la un element de matrice inexistent - acesta se numește eroare de supraestimare a unității(eroare off-by-one). Pentru a obține valoarea indexului ultimului element dintr-o matrice, scădeți unul din lungimea matricei. Un simptom tipic că începeți din greșeală să traversați o matrice la indexul 1 în loc de 0 este să descoperiți că atunci când încercați să accesați ultimul element al matricei, pur și simplu nu există un astfel de element.

În PHP, tablourile cu indici numerici sunt stocate exact în același mod ca și tablourile asociative. Matricele cu indici numerici oferă o modalitate mai ușoară de a parcurge seturile de date, deoarece accesarea următoarei valori este la fel de simplă ca și creșterea indexului precedentului.

Crearea unei matrice

Există trei modalități principale de a crea matrice într-un script PHP: alocarea unei valori unuia dintre elementele matricei viitoare (și implicit crearea unui tablou), folosind constructul array() și apelarea unei funcții care returnează o matrice ca valoarea sa.

Atribuire directă

Cea mai simplă modalitate de a crea o matrice este să acționați asupra unei variabile ca și cum ar fi deja o matrice și să îi atribuiți o valoare:

Cod PHP // Creați și populați o matrice numerică $array = 1; $matrice = 2; $array = "Bună lume!"; // Creați și populați o matrice asociativă $arr["fruit"] = "măr"; $arr["color"] = "verde"; $arr["număr"] = 40; // Matricele asociative și numerice pot fi amestecate, nu // va provoca erori (dar este mai bine să nu folosiți această abordare) $arr = "pear"; $array["zece"] = 10;

Pentru a crea o matrice, trebuie să determinați valorile elementelor și indicilor acesteia. Orice valoare poate fi folosită ca element de matrice, inclusiv șiruri de caractere, numere și chiar alte matrice. Câmpul cheie trebuie să fie scalar. Valorile scalare sunt valori primitive, cum ar fi numere sau șiruri de caractere, inclusiv valori TRUE și FALSE, dar nu și date care pot avea mai multe valori compuse, cum ar fi obiectele. De asemenea, în câmpul cheie matrice pentru fiecare element, ar trebui să existe valoare unică, altfel puteți scrie un element nou peste unul existent, cu aceeași cheie. Dacă încercați să atribuiți o cheie unui element nou care este deja definit pentru alt element, noua valoare o va înlocui pur și simplu pe cea veche.

construcție array().

O altă modalitate de a crea o matrice este utilizarea constructului array(), care creează o nouă matrice bazată pe specificația elementelor și a cheilor asociate acestora. În versiunea sa cea mai simplă, constructul array() este apelat fără parametri, rezultând o matrice nouă, goală. Mai complexă decât cea mai simplă este versiunea în care constructul array() preia o listă de elemente separate prin virgulă de stocat, fără a fi specificată nicio cheie. Rezultatul este că elementele sunt stocate în matrice în ordinea dată și li se atribuie chei întregi bazate pe zero. De exemplu, executând instrucțiunea:

Cod PHP // Creați o matrice numerică folosind construcția array() $fruit = array("Orange", "Apple", "Banana", "Pear");

face ca numele variabilei $fruit să devină numele unui tablou cu patru elemente șir ("Orange", "Apple", "Banana", "Pear"), respectiv indexate 0,1, 2 și 3. În plus, matricea își amintește ordinea în care i-au fost scrise elemente. Astfel, operația de mai sus de atribuire a unei valori variabilei $fruit presupune exact același rezultat ca și următoarele operații:

Cod PHP

cu condiția ca variabila $fruit să fie nelegată la momentul primei atribuiri. Un efect similar poate fi obținut și prin excluderea indicilor dintr-o operațiune de atribuire, ca în exemplul următor:

Cod PHP $fructe = "portocale"; $fruct = "Mer"; $fruct = "banana"; $fructe = "Pere";

În acest caz interpret PHP operează pe presupunerea că elemente consecutive, care trebuie să aibă indici întregi, numărați de la zero în sus.

Trebuie subliniat din nou că, implicit, numerotarea indicilor de matrice începe de la zero, nu de la unu. Această convenție pentru numerotarea indicilor de matrice este acceptată în majoritatea limbajelor de programare.

LA exemplu simplu construcția array() în exemplul anterior, indexarea elementelor a fost făcută automat, dar astfel de indici sunt pur întregi și sunt numărați în sus de la zero, așa că această abordare nu oferă o alegere largă. Dar după cum se dovedește, constructul array() oferă posibilitatea de a folosi o sintaxă specială pentru a crea matrice asociative. În loc de a enumera valorile elementelor separate prin virgulă, acest construct poate furniza perechi cheie-valoare separate prin virgulă, în care cheia și valoarea sunt separate prin caracterul special =>. Luați în considerare următoarea afirmație:

Cod PHP $fructe = array(0 => "Portocale", 1 => "Mer", 2 => "Banana", 3 => "Pere");

Executarea acestei instrucțiuni va produce același rezultat ca și opțiunile de atribuire de mai sus - fiecare șir va fi stocat secvențial în matrice și acestor valori șiruri vor fi alocate indici 0, 1, 2, 3. Cu toate acestea, puteți utiliza exact acest lucru în schimb aceeași structură sintactică pentru a stoca aceleași elemente, dar cu indici de șir:

Cod PHP $fructe = matrice("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere");

Ca urmare a acestui fapt, aceleași patru elemente vor fi adăugate la matrice în aceeași ordine, dar indexate folosind tastele, corespunzătoare numelor culori, nu numere. De exemplu, pentru a extrage numele unui fruct galben dintr-o matrice, este suficient să evaluăm următoarea expresie:

Cod PHP // Acest element trebuie să aibă valoarea "Banana" $fruit["galben"];

Funcții care returnează matrice

Ultimul mod de a crea o matrice într-un script este apelarea unei funcții care returnează o matrice. Aceasta poate fi o funcție definită de utilizator sau o funcție încorporată care creează o matrice folosind unele metode interne PHP.

De exemplu, multe funcții care asigură interacțiunea cu baza de date își returnează rezultatele sub formă de tablouri create dinamic. Alte funcții sunt furnizate exclusiv în scopul creării de matrice care sunt convenabile pentru a fi utilizate ca stub-uri în funcțiile ulterioare de manipulare a matricei. Una dintre aceste funcții este gamă(), care ia două numere întregi ca parametri și returnează o matrice umplută cu toate numerele întregi (inclusiv) aflate pe axa numerică dintre acești parametri. Cu alte cuvinte, instrucțiunea $my_array = range(1,5); este echivalent cu $my_array = array(1, 2, 3, 4, 5);.

Valorile eșantionului

Această secțiune vă permite să găsiți răspunsul la întrebarea cum sunt preluate valorile dintr-o matrice după ce sunt stocate în această matrice.

Selectarea cu un index sau o tastă

Cea mai directă modalitate de a prelua valoarea unui element de matrice este utilizarea indexului elementului. De exemplu, dacă o valoare a fost scrisă în tabloul $my_array la indexul 5, atunci evaluarea expresiei $my_array ar trebui să conducă la o selecție a valorii stocate.

constructia list().

Există multe alte modalități de a prelua valori din matrice care nu folosesc chei. Cele mai multe dintre aceste metode se bazează pe faptul că matricele înregistrează implicit elementele în ordinea în care elementele au fost transferate în stocare. Construcția list() este folosită pentru a atribui variabilelor mai multe valori ale elementelor matrice consecutive. Să presupunem că au fost executate două declarații:

Cod PHP $fructe = array("Portocale", "Mer", "Banana", "Pere"); lista($fructe1, $fructe2) = $fructe;

Aceste instrucțiuni fac ca șirul „Orange” să fie atribuit la $fruit1 și șirul „Apple” la $fruit2 (șirul „Banana” nu este atribuit nici unei variabile deoarece nu au fost setate suficiente variabile). Variabilelor din constructul list() li se atribuie valorile elementelor matricei în ordinea în care elementele au fost stocate inițial în matrice. Observați cât de neobișnuită este structura sintactică a operatorului de atribuire utilizat - constructul list() este în stânga semnului operatorului de atribuire (=), în timp ce numai numele de variabile pot fi găsite de obicei în această poziție.

Într-un anumit sens, list() este opusul sau inversul lui array(), deoarece array() își împachetează parametrii într-o matrice, în timp ce list() despachetează o matrice prin alocarea de valori variabilelor individuale.

Matrice multidimensionale

În toate exemplele de până acum, tablourile au fost unidimensionale, deoarece cheile date între paranteze au definit doar un nivel de acces la matrice. Dar limbajul PHP facilitează furnizarea de suport pentru matrice multidimensionale cu un număr arbitrar de chei. Matricele multidimensionale sunt pur și simplu matrice care stochează alte matrice. Mai jos este un exemplu de creare a unor tablouri multidimensionale numerice și asociative, iar mai jos este o diagramă care explică utilizarea lor:

Cod PHP // Două tablouri simple unidimensionale $counts = array(1, 2, 10, 14, -5); $fructe = array("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"); // Două tablouri bidimensionale $număr2 = 1; $counts2 = 2; $counts2 = 3; $counts2 = 4; $counts2 = 5; $counts2 = 6; $counts2 = 7; $counts2 = 8; $counts2 = 9; $natura = matrice("fructe" => matrice("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"), " floare" => matrice ("red" => "Aster", "alb" => "Trandafir", "roz" => "Bujor", "albastru" => "Clopotel")); // Afișează valoarea unei flori albe ecou $nature["flower"]["white"]; Structura tablourilor unidimensionale și bidimensionale din exemplu

Trebuie remarcat faptul că încercarea de a face referire la o matrice multidimensională cu index greșit pentru a selecta o valoare nu atrage o pedeapsă severă; dacă nu se găsește nicio cheie de potrivire, atunci întreaga expresie este tratată ca o variabilă nelegată.

Obținerea de informații despre matrice

Mai sus a descris cum să creați matrice, să stocați valori în matrice și apoi să recuperați valorile din nou atunci când este necesar. Tabelul de mai jos rezumă câteva dintre celelalte tipuri de funcții care pot fi utilizate pentru a obține informații despre matrice.

Funcții PHP simple pentru obținerea de informații despre matrice
Funcţie Descriere
is_array() Preia un singur parametru de orice tip și returnează adevărat dacă acel parametru este o matrice; altfel returnează false
numara() Ia o matrice ca parametru real și returnează numărul de elemente nevide din matrice
dimensiunea() Identic pentru a număra()
in_array() Este nevoie de doi parametri reali: un element (care poate fi scris într-o matrice ca valoare) și o matrice (care poate conține un element). Returnează adevărat dacă elementul este conținut în matrice ca valoare; altfel returnează false. (Rețineți că această funcție nu verifică anumite chei din matrice.)
isSet($array[$key]) Ia forma unui tablou și returnează adevărat dacă partea indicată de cheie este o cheie validă pentru matrice. (Acesta este un mod specializat de a folosi mai mult functie comuna isSet() care verifică dacă variabila este legată.)

Trebuie remarcat faptul că toate aceste funcții operează numai la adâncimea unui nivel al unui tablou dat, prin urmare, pentru a obține date despre valorile stocate în matrice multidimensională la niveluri mai profunde, este necesar să se indice la ce nivel urmează a fi obţinută informaţia. Următorul este un exemplu în cazul matricei bidimensionale de mai sus $nature:

Cod PHP ecou count($natura); // 2 ecou count($natura["floare"]); // patru

Eliminarea elementelor din matrice

Operația de eliminare a unui element dintr-o matrice este simplă și complet analogă cu operația de eliminare a unei valori atribuite unei variabile. Doar apelați funcția unset() ca mai jos:

Cod PHP $my_array = "valoare"; $my_array = "această valoare trebuie eliminată"; $my_array = "o altă valoare"; unset($my_array);

După ce codul s-a terminat de executat, această variabilă $my_array va conține două valori ("valoare", "încă o valoare") asociate cu doi indici (respectiv 0 și 2).

Trebuie remarcat faptul că operația de eliminare a unui element nu este similară cu operația de atribuire a unui element valoare goală. De exemplu, dacă în loc să apelați funcția unset(), a fost folosită următoarea instrucțiune:

Cod PHP $my_array = "";

atunci tabloul ar conține în cele din urmă trei valori stocate ("valoare", "", "o altă valoare") asociate cu trei indici (respectiv 0, 1 și 2).

Iterație matrice

Matricele PHP nu numai că stochează valorile asociate cheilor corespunzătoare, dar formează implicit o listă ordonată de perechi cheie-valoare, stocate în ordinea în care perechile au fost scrise în matrice. Această structură de matrice a fost adoptată pe baza faptului că matricea poate fi utilizată pentru a oferi iterație pe întregul conținut al matricei. (Trebuie remarcat faptul că această sarcină este dificil de realizat prin simpla formare a unei bucle care incrementează valoarea indexului, deoarece indecșii matricei PHP nu trebuie să fie numerici.)

De fapt, construit în structura matricelor este un fel de sistem ascuns indicatoare. Fiecare pereche cheie-valoare stocată indică către următoarea, iar unul dintre efectele secundare ale acesteia este că pointerul curent indică chiar primul element și rămâne îndreptat către acel element, dacă nu este mutat de una dintre funcțiile de iterație.

În fiecare matrice, o anumită pereche cheie-valoare stocată este amintită ca fiind cea curentă, iar o anumită parte a acțiunii funcțiilor matricei iterative se bazează pe principiul deplasării acestui marker al perechii curente prin lista internă de chei și valorile. Vom numi acest marker indicatorul curent, dar rețineți că limbajul PHP nu acceptă pointeri cu drepturi depline în sensul în care programatorii C/C++/C# interpretează acest concept. În plus, termenul indicator curent, folosit în sensul indicat, va apărea numai în contextul descrierii mijloacelor de iterare peste elementele unui tablou.

Sistemul considerat de pointeri bazat pe lista legată este cale alternativă obținerea de informații despre matrice și manipularea acestora. Sistemul pointer există împreună cu sistemul care scrie și preia din matrice pe baza cheilor.

bucla foreach

Puteți folosi bucla foreach pentru a trece printr-o matrice. Desigur, acest construct pare să fie moștenit din constructul foreach al lui Perl, dar are o structură sintactică ușor ciudată (care, totuși, nu se potrivește cu structura sintactică ciudată a unui construct similar în Perl). Sintaxa pentru construcția foreach în PHP vine în două variante și a decide pe care să o utilizați în programul dvs. depinde dacă doriți să preluați atât cheile, cât și valorile matricei sau doar valori:

Cod PHP $fructe = array("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"); // Folosind o buclă foreach pentru a extrage doar valorile foreach ($fruits as $value) ( ​​​​echo $value."
";) ecou"
"; // Folosind o buclă foreach pentru a extrage valori și chei foreach ($fruits ca $key => $f) ( echo " ".$cheie."=> ".$f."
"; }

Folosind o buclă foreach

Funcții iterative

Îmi place constructul foreach, dar este într-adevăr util doar în situațiile în care doriți doar să parcurgeți valorile stocate într-o matrice. Pentru a obține un control suplimentar asupra codului de procesare, trebuie utilizate funcții iterative, care sunt descrise în tabelul de mai jos:

Funcții de procesare a matricei într-o buclă
Funcţie Opțiuni Efect secundar Valoare returnată
actual() Dispărut

Valoarea din perechea cheie/valoare indicată în prezent de pointerul intern „actual” (sau falsă dacă nu există)

Următorul() Un parametru real cu notație matrice

Avansează indicatorul cu un element. Dacă pointerul indică deja ultimul element, această funcție avansează pointerul „în afara matricei”, astfel încât un apel ulterior la curent() va returna false

Valoarea către care indică pointerul după ce a fost avansat (sau falsă dacă nu există o valoare curentă, adică pointerul este în afara limitelor din matrice)

prev() Un parametru real cu notație matrice

Avansează indicatorul către direcție inversă pentru un element. Dacă indicatorul indică deja primul element, avansează indicatorul în afara matricei, setându-l la „înainte de începutul matricei”

Valoarea către care indică indicatorul după ce a fost mutat înapoi (sau falsă dacă nu există o valoare curentă, adică indicatorul este în afara intervalului)

reset() Un parametru real cu notație matrice

Avansează indicatorul înapoi, astfel încât să indice către prima pereche cheie-valoare (sau către poziția „înainte de începutul matricei” dacă matricea este goală)

Prima valoare stocată în matrice sau falsă dacă matricea este goală

Sfârşit() Un parametru real cu notație matrice

Mută ​​indicatorul la directie înainteși îl setează la ultima pereche cheie-valoare

Ultima valoare din lista de perechi cheie-valoare

pos() Un parametru real cu notație matrice

Niciunul (Această funcție este un alias pentru funcția curent()).

Valoarea perechii cheie-valoare către care indică în prezent indicatorul

fiecare() Un parametru real cu notație matrice

Mută ​​indicatorul înainte la următoarea pereche cheie/valoare

O matrice care conține datele cheie și valoare din perechea cheie/valoare care era curentă înainte ca indicatorul să fie mutat (sau fals dacă nu există pereche curentă, adică pointerul se află în afara matricei). În matricea returnată, cheia și valoarea sunt stocate sub propriile chei de matrice, respectiv 0 și 1, și, de asemenea, sub propriile chei de matrice, respectiv „cheie” și „valoare”

array_walk() Primul parametru este parametrul real cu o notație matrice, al doilea parametru este numele unei funcții cu doi (sau trei) parametri reali care trebuie apelați pe fiecare pereche cheie/valoare, iar al treilea parametru este un parametru real opțional.

Funcția array_walk() apelează funcția specificată ca al doilea parametru real pe fiecare pereche cheie/valoare. Efectele secundare depind de efectele secundare ale funcției trecute

Returnează valoarea 1

Funcția current() returnează valoarea stocată către care indică pointerul. Într-o matrice nou creată cu elemente, indicatorul curent indică întotdeauna primul element. Funcția next() avansează mai întâi indicatorul și apoi returnează valoarea curentă indicată de indicator. Dacă funcția next() este apelată atunci când pointerul curent indică deja ultima valoare stocată și, prin urmare, trebuie să depășească sfârșitul matricei, funcția returnează false.

Ca exemplu, luați în considerare afișarea conținutului unui tablou folosind funcțiile iterative current() și next(), după cum se arată mai jos:

Cod PHP $fructe = array("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"); funcția print_all_next($array) ( $curent = curent($array); if ($current) echo $current."
"; else echo "Pointer nu a fost găsit"; while ($current = next($array)) echo $current."
"; ecou"
"; ) print_all_next($fructe); print_all_next($fructe); // Inițiază sună din nou, // să vedem ce se întâmplă

După executarea acestui cod de ieșire matrice, următoarele date vor fi primite din nou:


Folosind funcțiile curent() și următor().

În legătură cu obținerea rezultatelor prezentate aici, se pune întrebarea: cum se face că al doilea apel la funcția print_all_next () a condus la aceleași rezultate? Cum ați reușit să întoarceți indicatorul curent la început pentru a repeta toate operațiunile din nou a doua oară? Răspunsul provine din faptul că apelurile de funcții PHP sunt apeluri după valoare. Astfel, copiile parametrilor sunt transmise funcției, iar funcția operează pe aceste copii, și nu pe parametrii înșiși. Prin urmare, în ambele apeluri de funcții, o copie nemodificată a matricei utilizate ca parametru este transmisă, iar matricea în sine nu este afectată de apelul la next().

Exemplul anterior arată cum vă puteți scrie propria funcție, care este un analog parțial al buclei foreach. Dar bucla foreach vă permite să afișați și cheile. Să modificăm exemplul nostru adăugând chei la ieșire folosind funcția cheie():

Cod PHP $fructe = array("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"); funcția print_all_next($array) ( $curent = curent($array); $current_key = cheie($array); if ($curent) echo " $key_curent=> ".$actual."
"; else echo "Pointer nu a fost găsit"; while ($curent = următorul($array)) ($curent_key = cheie($array); echo " $key_curent=> ".$actual."
";) ecou"
"; ) print_all_next($fructe);

Folosind funcția key() pentru a obține cheile unui tablou

Instrumente de conversie a matricei

PHP oferă o serie de funcții care vă permit să manipulați datele după ce datele au fost stocate ca matrice pentru ușurință în utilizare. General trăsătură distinctivă Funcțiile discutate în această secțiune sunt că toate iau o matrice ca parametru, efectuează anumite acțiuni cu acesta și returnează rezultatele sub forma unei alte matrice (o descriere a funcțiilor de sortare a matricei va fi dată în una din secțiunile următoare ).

Funcțiile de manipulare a matricei sunt prezentate în tabelul de mai jos:

Funcții de conversie a matricei
Descriere Funcţie
array_keys() Preia un singur parametru ca matrice și returnează o nouă matrice ale cărei valori sunt cheile matricei de intrare și ale cărei chei sunt numere întregi consecutive începând de la zero
valori_matrice() Preia un singur parametru ca matrice și returnează o nouă matrice ale cărei valori sunt valorile matricei de intrare și ale cărei chei sunt numere întregi crescătoare consecutiv începând de la zero
array_count_values() Preia un singur parametru ca matrice și returnează o matrice nouă ale cărei chei sunt valorile matricei de intrare și ale cărei valori sunt numărul de ori valoarea initialaîntâlnite în matricea de intrare
array_flip() Preia un singur parametru ca matrice și îl modifică astfel încât valorile să devină chei și invers
array_reverse() Preia un singur parametru ca matrice și inversează ordinea internă a perechilor cheie/valoare. Dacă există chei numerice întregi în matrice, acestea sunt, de asemenea, renumerotate
amesteca() Preia un singur parametru ca matrice și se modifică la întâmplare ordonarea internă a perechilor cheie-valoare. Cheile întregi sunt de asemenea renumerotate în funcție de noua ordine. În timpul execuției funcției shuffle() se folosește generatorul de numere aleatoare rand(), deci înainte de a apela această funcție, trebuie mai întâi să apelați funcția srand() pentru a inițializa valoarea inițială a generatorului (acesta este discutată în continuare). articol)
array_merge() Preia doi parametri ca două matrice, le îmbină și returnează o nouă matrice formată din elementele primului tablou (în ordinea inițială) urmate de elementele celei de-a doua matrice.

Această funcție este cel mai aplicabilă procesării tablourilor care sunt simple liste conectate, mai degrabă decât tablourilor asociative, deoarece dacă două tablouri asociative au aceleași chei, doar una dintre valorile pentru fiecare cheie duplicată intră în tabloul rezultat și al doilea este distrus. Dacă există chei numerice întregi în tabloul rezultat, acestea sunt renumerotate în conformitate cu noua ordonare, începând de la zero

array_pad() Este nevoie de trei parametri: matricea de intrare, numărul de elemente din matricea căptușită și valoarea care ar trebui să fie conținută în elementele căptușite. Returnează o nouă matrice care a fost completată cu elemente conform următoarelor reguli. Dacă numărul de elemente din matricea căptușită depășește numărul de elemente din matricea de intrare, atunci matricea este umplută de la dreapta la numărul specificat de elemente în același mod ca și cum ar fi efectuate următoarele operații de atribuire pe rând: $ my_array = $pad_value.

Dacă valoarea specificată pentru numărul de elemente din matricea căptușită este negativă, atunci umplutura se face în același mod ca și pentru o valoare pozitivă, cu excepția faptului că umplutura matricei are loc în stânga (la început) și nu pe dreapta (la final). Dacă numărul de elemente din matricea de intrare depășește numărul de elemente din matricea căptușită, atunci această funcție nu are efect.

array_slice() Este nevoie de trei parametri: o matrice de intrare, un decalaj întreg și o valoare a lungimii întregi (opționale). Returnează o nouă matrice care este un fragment din cea veche - o subsecvență a listei sale de perechi cheie/valoare. Elementele de început și de sfârșit ale unui fragment sunt determinate de offset și lungime. O valoare de offset pozitivă indică faptul că elementul de început este elementul numărat de la începutul matricei, iar o valoare de offset negativă indică elementul numărat de la sfârșit.

Parametrul opțional de lungime poate fi, de asemenea, pozitiv sau negativ. O valoare pozitivă determină lungimea feliei care ar trebui să fie obținută ca urmare a executării funcției array_slice(), iar o valoare negativă determină pe ce element, numărat de la sfârșitul matricei, trebuie să se termine felia. Dacă nu există niciun parametru de lungime, selecția continuă până la sfârșitul matricei

array_splice() Îndepărtează un fragment (care este tratat ca parte tăiată) dintr-o matrice și îl înlocuiește cu conținutul altei matrice. Este nevoie de patru parametri: o matrice de intrare, un offset, o valoare opțională a lungimii întregi și o matrice opțională de înlocuire. Returnează o nouă matrice care conține porțiunea tăiată care a fost eliminată din matricea de intrare. Regulile de utilizare a parametrilor offset și lungime care specifică felia care trebuie eliminată sunt aceleași ca în funcția array_slice() descrisă mai sus.

Dacă nu este dată nicio matrice de înlocuire, atunci această funcție îndepărtează pur și simplu (distructiv) porțiunea tăiată a matricei de intrare și o returnează. Dacă există o matrice de înlocuire, elementele acestei matrice sunt inserate în locul părții tăiate îndepărtate

Să ne uităm la aceste funcții mai detaliat folosind exemple.

Preluarea cheilor și valorilor

Funcția array_keys() returnează cheile matricei date ca parametru de intrare sub forma unui nou tablou ale cărui chei sunt valorile stocate. Cheile noii matrice sunt indecși obișnuiți sub formă de numere întregi incrementate automat care încep de la zero. Funcția array_values() face exact același lucru, cu excepția faptului că valorile stocate sunt valorile din tabloul original:

Cod PHP $fructe = array("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"); echo „Matrice de chei:
"; foreach (array_keys($fruits) as $key => $value) ( ​​​​echo " ".$cheie."=> ".$value."
";) ecou"
Matrice de valori:
"; foreach (array_values($fructe) ca $key => $value) ( ​​​​echo " ".$cheie."=> ".$value."
"; }

Obținerea unei matrice de chei și valori din matricea originală folosind funcțiile array_keys() și array_values()

Aparent, rezultatele aplicării celei de-a doua dintre funcțiile luate în considerare (array_values()) sunt de mai puțin interes, deoarece această funcție preia de fapt tabloul original și formează un nou tablou, ale cărui chei sunt înlocuite cu numere crescânde succesiv.

O operație ceva mai utilă (care poate fi de mare ajutor în rezolvarea problemei de ordonare) poate fi efectuată folosind funcția array_count_values(). Această funcție ia ca parametru o matrice și returnează o matrice nouă cu valorile vechi convertite în chei noi și noile valori reprezentând de câte ori apare fiecare valoare veche în matricea originală.

Oglindire, inversare și amestecare aleatorie

O funcție mai rar folosită decât cele descrise mai sus este funcția array_flip(), care convertește cheile matrice în valori și invers. Trebuie remarcat faptul că cheile matricei sunt garantate a fi unice, dar valorile matricei nu sunt garantate a fi unice. Din acest motiv, orice valori duplicate din matricea originală sunt convertite în aceeași cheie în noua matrice. Prin urmare, doar una dintre cheile originale este păstrată și devine noua valoare corespunzătoare.

Operația de inversare a matricei este mai puțin complicată: funcția array_reverse() returnează o nouă matrice în care perechile cheie/valoare sunt în ordine inversă.

Dacă în program trebuie introduse unele elemente suplimentare ale aleatoriei, atunci funcția shuffle() poate fi folosită pentru aceasta. Funcția shuffle() ia ca parametru o matrice și reordonează aleatoriu elementele din matrice.

Următorul exemplu arată utilizarea acestor funcții:

Cod PHP $fructe = array("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"); // array_flip() echo "Matrice sursă:
"; foreach ($fructe ca $cheie => $valoare) ( ​​echo " ".$cheie."=> ".$value."
";) ecou"
array_flip():
"; $fructe = array_flip($fructe); foreach ($fructe ca $cheie => $valoare) ( ​​echo " ".$cheie."=> ".$value."
"; ) // array_reverse() echo "
Matrice sursă:
"; $array = interval (1,5); foreach ($array ca $valoare) ( ​​echo $valoare." "; ) echo "
Array după folosirea funcției array_reverse():
"; $array = array_reverse($array); foreach ($array ca $valoare) ( ​​echo $valoare." "; ) // shuffle() echo "

Matrice sursă:
"; $array = interval (1,10); foreach ($array ca $valoare) ( ​​echo $valoare." "; ) echo "
Array după folosirea funcției amesteca():
"; srand((double)microtime()*1000000); // Folosit pentru a genera numere aleatorii shuffle($array); foreach ($array ca $valoare) ( ​​echo $valoare." "; )

Folosind funcțiile array_flip(), array_reverse(), shuffle().

Spre deosebire de multe alte funcții de matrice din acest articol, funcția shuffle() este distructiv. Aceasta înseamnă că se aplică direct matricei date ca parametru și o modifică mai degrabă decât să returneze o matrice nou creată. (Funcțiile care returnează un obiect nou și nu își modifică parametrii sunt de obicei numite constructive sau nedistructive.) Printre altele, aceasta înseamnă că Calea cea buna numirea funcției considerate de amestecare aleatorie a elementelor nu este astfel:

Cod PHP $array = shuffle($array); // Construcție greșită!

Îmbinarea, adăugarea, tăierea și lipirea elementelor de matrice

Dacă doriți să îmbinați două matrice, de exemplu pentru a obține o listă mai completă, puteți utiliza funcția array_merge(). Această funcție ia două sau mai multe matrice ca parametri și returnează o nouă matrice cu chei renumerotate, cu a doua matrice atașată la sfârșitul primei. De exemplu:

Cod PHP $new_array = array_merge(range(0,2), array(5,6,7), array(10,11)); //

Funcția array_pad() este folosită pentru a crea o anumită sumă perechile cheie/valoare de început sau de final pentru a mări dimensiunea matricei. Această funcție ia ca prim parametru o matrice de intrare. Acest parametru trebuie să fie urmat de numărul de elemente cu care matricea urmează să fie mărită și apoi de valoarea care urmează să fie atribuită elementelor suplimentare. Dacă un număr întreg pozitiv este specificat ca al doilea parametru, atunci matricea este completată la sfârșit, iar dacă este specificat un număr întreg negativ, matricea este completată la început. Dacă al doilea parametru este mai mic decât dimensiunea matricei, nu se efectuează nicio umplutură:

Cod PHP $fructe = array("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"); foreach (array_pad($fructe, 10, "gol") ca $key => $value) ( ​​​​echo " ".$cheie."=> ".$value."
"; }

Mărirea dimensiunii unui tablou cu funcția array_pad().

Rețineți că cheile atribuite automat încep de la zero, chiar dacă sunt numărate din a cincea poziție.

Puțin mai complexe sunt funcțiile array_slice() și array_splice(). Primul dintre ele returnează un subset de elemente ale tabloului de intrare, luând offset-ul și lungimea ca al doilea și, respectiv, al treilea parametru. Funcția array_splice() este similară cu funcția array_slice(), dar ia un al patrulea parametru, care poate fi o matrice de orice lungime pentru a fi inserată în matricea de intrare.

Stive și cozi

Stivele și cozile sunt structuri de date abstracte folosite adesea în programare care impun cerințe privind utilizarea anumitor reguli de accesare a obiectelor pe care le conțin, iar aceste reguli sunt practic independente de tipul de obiecte în sine. Matricele PHP sunt potrivite pentru rezolvarea problemelor de emulare a structurilor de date de alte tipuri, în plus, din cauza lipsei de tastare strictă a elementelor de matrice PHP, este posibilă emularea cu ușurință a structurilor de date precum stivele și cozile folosind matrice. PHP oferă câteva funcții de matrice special pentru acest scop. Dacă programul folosește numai astfel de funcții, atunci programatorul poate nici măcar să nu ia în considerare faptul că structurile de date luate în considerare se bazează pe matrice.

O stivă este un container care stochează valori și acceptă accesuri back-to-back (last-in-first-out - LIFO) la acele valori. Aceasta înseamnă că stiva menține ordinea valorilor stocate pe el și oferă singura cale preluarea valorii stocate în ea - extragerea (și ștergerea) celei mai recente valori stocate:

Stivă - „ultimul intrat, primul ieşit”

O analogie comună folosită pentru a descrie un teanc este un teanc de tăvi într-o cantină în fața uneia dintre liniile de distribuție, din care clienții iau tăvile scoțându-le de sus, iar angajații reaprovizionează în mod constant tăvile stivuindu-le de sus. . Tăvile noi pot fi așezate deasupra celor existente și luate de sus, dar nu se poate ajunge la o tavă amplasată anterior fără a scoate mai întâi tăvile așezate ulterior.

Coada este similară cu stiva, dar funcționează pe principiul unei cozi secvențiale (first-in-first-out - FIFO). De obicei, pentru a descrie o astfel de coadă, se folosește o analogie cu un lanț de oameni care așteaptă serviciul, care în Anglia este notat cu coadă, iar în SUA - linie. Regula generala serviciul pentru persoanele care stau la coadă este ca următoarea persoană care a stat la coadă pentru cel mai mult timp să fie servită:

Coadă - „primul intrat, primul ieşit”

Funcțiile array_push() și array_pop() sunt folosite pentru a lucra cu stive. Funcţie array_push() ia ca parametru matricea originală, urmată de orice număr de elemente care urmează să fie împinse în stivă. Elementele sunt inserate la sfârșitul matricei, în succesiune de la stânga la dreapta. Funcţie array_pop() ia o astfel de matrice ca parametru și elimină elementul de la sfârșitul matricei, returnând acel element.

Sortarea matricelor

În cele din urmă, PHP oferă multe funcții pentru sortarea tablourilor. După cum s-a menționat mai sus, este uneori dificil să se facă distincția între o situație în care asocierile cheie-valoare sunt aplicate într-o matrice și o situație în care cheile numerice sunt tratate ca informații de ordonare care trebuie schimbate după ce ordinea elementelor a fost schimbată. Din fericire, limbajul PHP oferă variante ale funcțiilor de sortare care țin cont de particularitățile fiecăruia dintre aceste tipuri de situații. În plus, limbajul PHP vă permite să sortați articolele în ordine crescătoare sau descrescătoare, precum și să utilizați funcțiile de ordonare furnizate de utilizator. Numele funcțiilor de sortare sunt abreviate, dar conțin special denumiri de litere(cu excepția părții numelui cu cuvântul sort), care vă permit să determinați scopul funcției. Mai jos este o scurtă descriere a acestor denumiri de litere:

    Inițial „a” înseamnă că funcția sortează după valoare, dar păstrează asocierile dintre perechile cheie-valoare așa cum există.

    Inițial „k” înseamnă că sortarea este după chei, dar asocierile cheie-valoare sunt păstrate.

    Absența unui „a” sau „k” inițial indică faptul că sortarea este după valoare, dar asocierile cheie-valoare nu sunt păstrate. În special, tastele numerice sunt renumerotate pentru a reflecta noua ordine.

    Litera „r” înaintea cuvântului sort înseamnă că ordinea de sortare este inversată.

    "u" inițial înseamnă că funcția ia un al doilea parametru, numele unei funcții definite de utilizator care specifică ordonarea oricăror două elemente care urmează să fie sortate.

Aceste reguli simple vă va ajuta să nu vă confundați în următoarele funcții de sortare:

Funcții de sortare matrice
Funcţie Descriere
fel() Este nevoie de un singur parametru ca matrice. Sortează perechile cheie-valoare după valoare, dar păstrează neschimbată maparea cheie-valoare. Este foarte convenabil să lucrezi cu tablouri asociative
matrice () La fel ca asort() dar sortează în ordine descrescătoare
ksort() Este nevoie de un singur parametru ca matrice. Sortează perechile cheie/valoare după cheie, dar păstrează intacte asocierile cheie/valoare
krssort() La fel ca ksort() dar sortează în ordine descrescătoare
fel() Este nevoie de un singur parametru ca matrice. Sortează perechile cheie-valoare ale unui tablou după valorile lor. Cheile pot fi renumerotate în funcție de noua ordine de valori
fel() La fel ca sort() dar sortează în ordine descrescătoare
uasort() Sortează perechile cheie/valoare după valoare folosind o funcție de comparare. Similar cu asort(), cu excepția faptului că ordonarea reală a valorilor este determinată de al doilea parametru, care este numele unei funcții de sortare definite de utilizator. Această funcție trebuie să returneze un număr negativ dacă primul argument îl precede pe al doilea (după cum este determinat de funcția de comparare), un număr pozitiv dacă primul argument îl urmează pe al doilea și zero dacă elementele comparate sunt aceleași.
uksort() Sortează perechile cheie/valoare după cheie utilizând o funcție de comparare. Similar cu uasort(), cu excepția faptului că ordonarea este pe chei, nu după valori
usort() Sortează o matrice după valoare utilizând funcția de comparare furnizată. Similar cu uasort(), cu excepția faptului că asocierile cheie-valoare nu sunt păstrate (la fel ca sort())

Mai jos este un exemplu simplu de sortare alfabetică:

Cod PHP $fructe = array("orange" => "Portocale", "rosu" => "Mer", "galben" => "Banana", "verde" => "Pere"); sortare($fructe); foreach ($fructe ca $cheie => $valoare) ( ​​echo " ".$cheie."=> ".$value."
"; }

Folosind funcția sort().

După cum puteți vedea, funcția sort() nu numai că a sortat valorile, dar a înlocuit și cheile text cu indici numerici. Dacă acest comportament nu este dorit, atunci trebuie utilizată funcția asort().

Expresii obisnuite Prelucrarea numerelor și operații matematice 1 2 3 4 5 6 7 8 9 10
  • Serghei Savenkov

    un fel de recenzie „rare”... parcă s-ar grăbi undeva