array-uri (masive)
Anterior am discutat cum putem salva o singură valoare într-o variabilă, de exemplu, un număr sau un șir de caractere. Dar, pe lângă asta, putem salva într-o variabilă un set de valori. Pentru asta folosim array-uri (masive).
Există mai multe moduri de a defini array-uri. Primul mod utilizează funcția array():
$numbers = array();
În acest caz, definim un array gol $numbers.
Al doilea mod utilizează paranteze pătrate []:
$numbers = [];
La definirea unui array, putem să îi atribuim imediat date inițiale. Dacă folosim paranteze pătrate, elementele array-ului sunt transmise în interiorul parantezelor:
$numbers = [1, 2, 3, 4];
Definirea echivalentă a unui array folosind funcția array():
$numbers = array(1, 2, 3, 4);
Elementele array-ului pot fi de orice tip.
Pentru a accesa elementele unui array, folosim chei. O cheie poate fi un număr sau un șir de caractere sau simultan atât numere, cât și șiruri.
Pentru array-urile obișnuite, cheia este un număr. Cheile numerice mai sunt numite și indici. Numerotarea indicilor începe de la zero, adică primul element al array-ului are indicele 0, al doilea element - indicele 1 și așa mai departe.
De exemplu, să accesăm al treilea element al array-ului:
<?php
$numbers = [1, 4, 9, 16];
echo $numbers[2]; // 9
?>
Deoarece numerotarea indicilor începe de la zero, pentru a accesa al treilea element, trebuie să folosim indicele 2.
Astfel obținem valoarea elementului array-ului. Dar, de asemenea, putem să o schimbăm:
<?php
$numbers = [1, 4, 9, 16];
$numbers[1] = 6;
echo $numbers[1]; // 6
?>
Trebuie să ținem cont de numărul de elemente din array. Nu putem accesa un element cu un indice inexistent:
<?php
$numbers = [1, 4, 9, 16];
echo $numbers[4];
?>
În acest caz, array-ul $numbers are doar 4 elemente, deci indicele ultimului element va fi 3. Astfel, elementul cu indicele 4 nu există, iar încercarea de a accesa valoarea sa echo $numbers[4] va genera un avertisment în PHP.
Cu toate acestea, dacă dorim să setăm un element la un indice inexistent, putem face asta:
<?php
$numbers = [1, 4, 9, 16];
$numbers[5] = 76;
echo $numbers[5]; // 76
?>
Aici setăm un element la indicele 5. După ce l-am setat, putem obține valoarea sa. Elementul cu indicele 4 tot nu va exista.
Pentru a adăuga un nou element în array, putem, ca în exemplul de mai sus, să setăm un nou element la un indice neutilizat. Dar există și alt mod:
<?php
$numbers = [1, 4, 9, 16];
$numbers[] = 25;
echo $numbers[4]; // 25
?>
Prin această metodă, un nou element este adăugat la sfârșitul array-ului, deci pentru a accesa noul element, trebuie să folosim indicele 4.
Pentru a obține o reprezentare completă a modului în care cheile și valorile elementelor sunt asociate într-un anumit array, putem folosi funcția print_r, care primește array-ul ca parametru:
<?php
$numbers = [1, 4, 9, 16];
$numbers[] = 25;
print_r($numbers);
?>
Rezultatul scriptului:
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
De asemenea, nu este necesar să inițializăm special o variabilă de tip array - putem adăuga elemente în array pe parcurs:
<?php
$numbers[] = 20;
$numbers[] = 120;
$numbers[] = 720;
print_r($numbers); // Array ( [0] => 20 [1] => 120 [2] => 720 )
?>
Operatorul =>
Operatorul => permite asocierea unei chei cu o anumită valoare. Deși la definirea array-ului de mai sus nu am avut nevoie de acest operator, putem să îl folosim. De exemplu, următorul array:
$numbers = [1, 4, 9, 16];
Este echivalent cu următorul array:
$numbers = [0 => 1, 1 => 4, 2 => 9, 3 => 16];
// $numbers = array(0 => 1, 1 => 4, 2 => 9, 3 => 16);
Fiecare element este definit în formatul: cheie => valoare.
În continuare, putem accesa elementele acestui array.
Acest operator poate fi util dacă dorim să redefinim ordinea indicilor. În mod implicit, numerotarea indicilor începe de la zero și fiecare element următor are indicele elementului anterior + 1. Operatorul => permite definirea indicilor manual, nu neapărat de la zero și nu neapărat în ordine:
$numbers = [1 => 1, 2 => 4, 5 => 25, 4 => 16];
echo $numbers[2]; // 4
De asemenea, putem seta indicele doar pentru un element, iar pentru elementele următoare indicele va crește automat cu o unitate:
$numbers = [4 => 16, 25, 36, 49, 64];
print_r($numbers);
În acest caz, numerotarea începe de la 4 - acesta este indicele elementului 16. Indicele pentru elementul 25 va fi 5 și așa mai departe.
Rezultatul:
Array ( [4] => 16 [5] => 25 [6] => 36 [7] => 49 [8] => 64 )
Parcurgerea unui array
Pentru parcurgerea unui array, putem folosi metoda standard for:
<?php
$users = ["Tom", "Sam", "Bob", "Alice"];
$num = count($users);
for ($i = 0; $i < $num; $i++) {
echo "$users[$i] <br />";
}
?>
În acest caz, nu definim manual indicii elementelor, astfel numerotarea începe de la zero și crește cu o unitate pentru fiecare element următor. Putem folosi variabila $i în ciclu pentru a transmite indicele, începând de la zero.
Singura dificultate poate fi cum să determinăm indicele ultimului element, pentru a stabili limita pentru variabila $i. În acest caz, putem folosi funcția integrată count() pentru a obține lungimea array-ului. Această funcție primește array-ul ca parametru și returnează lungimea sa.
Rezultatul scriptului:
Tom
Sam
Bob
Alice
Ciclu foreach
Cu toate acestea, metoda de parcurgere de mai sus nu va fi de ajutor dacă indicii sunt definiți manual și diferă de vecinii lor cu o valoare arbitrară. În acest caz, putem folosi ciclul special - foreach:
<?php
$users = [1 => "Tom", 4 => "Sam", 5 => "Bob", 21 => "Alice"];
foreach ($users as $element) {
echo "$element<br />";
}
?>
În ciclul foreach, toate elementele sunt extrase secvențial din array și valoarea lor este plasată în variabila specificată după cuvântul cheie as.
În acest caz, în variabila $element sunt plasate pe rând toate cele patru valori din array-ul $users. Când ultimul element este extras din array, ciclul se termină.
În final, obținem același rezultat:
Tom
Sam
Bob
Alice
Ciclul foreach permite extragerea nu doar a valorilor, ci și a cheilor elementelor:
<?php
$users = [1 => "Tom", 4 => "Sam", 5 => "Bob", 21 => "Alice"];
foreach ($users as $key => $value) {
echo "$key - $value<br />";
}
?>
În acest exemplu, la parcurgerea elementelor din ciclu, în variabila $key se va transmite cheia elementului, iar în variabila $value - valoarea acestuia.
Rezultatul scriptului:
1 - Tom
4 - Sam
5 - Bob
21 - Alice