Treci la conținutul principal

Obținerea unui singur element

Această lecție arată cum se obține un element dintr-un tablou: după poziția lui, după o condiție sau la întâmplare. Arată și cum se verifică dacă un element există în general.

Când o căutare poate eșua, PHP răspunde cu null. Citirea unui index care nu există, cum ar fi $words[5] într-un tablou de 5 elemente, nu oprește programul: ridică un avertisment (Undefined array key 5) și dă null.

Operatorul de coalescență nulă ?? face aceeași citire sigură și silențioasă: $words[5] ?? "missing" caută indexul fără niciun avertisment și revine la "missing" atunci când nu există niciun element. Această pereche — null pentru „nu există” și ?? pentru valoarea de rezervă — este idiomul care străbate toată pagina.

PHP 8.4 a adăugat și funcții de căutare gata făcute: array_find(), array_any() și array_all(). Ele sunt folosite mai jos alături de clasicele in_array() și count().


Obținerea după poziție

Fiecare element al unei liste simple are o poziție numită index. Primul index este 0, deci ultimul este count($words) - 1.

Pentru a citi un element după poziție, scrie indexul între paranteze pătrate: $words[3]. PHP nu numără de la sfârșit — $words[-1] ar căuta o cheie -1 care nu există. Ultimul element se citește cu array_key_last().

Pentru un index care poate fi în afara intervalului, ?? înlocuiește o întreagă familie de funcții ajutătoare: $words[$i] ?? null este „elementul de la poziție, sau null”, iar $words[$i] ?? fallback($i) este „elementul de la poziție, sau altfel”.

Elementul de la o poziție

$words[3] citește elementul de la indexul 3. Deoarece numărarea începe de la 0, acesta este al patrulea cuvânt.

Prompt
Creează un tablou cu cuvintele one, two, three, four, five. Afișează elementul de la indexul 3 folosind paranteze pătrate.
Ieșire: script PHP
Element at a position

Primul și ultimul element

Primul element este $words[0]. Pentru ultimul, array_key_last($words) returnează ultima cheie — aici 4, pentru că tabloul are 5 elemente, dar primul index este 0. $words[-1] nu ar funcționa: PHP nu are indecși negativi pentru tablouri.

Prompt
Creează un tablou cu cuvintele one, two, three, four, five. Afișează primul element prin indexul 0, apoi ultimul element folosind array_key_last.
Ieșire: script PHP
First and last element

Elementul de la o poziție, sau null

elementAt() răspunde cu elementul sau cu null. Indexul 1 există, deci primul apel afișează two. Indexul 5 nu există: funcția ajutătoare dă null, nu se ridică niciun avertisment, iar ?? "missing" de la locul apelului transformă null în textul missing.

Prompt
Scrie o funcție ajutătoare elementAt care returnează elementul de la un index sau null atunci când indexul nu există, folosind operatorul ??. Apelează-o pe cuvintele one, two, three, four, five cu indexul 1 și cu indexul 5 și afișează fiecare rezultat folosind „missing” ca valoare de rezervă după ?? la locul apelului.
Ieșire: script PHP
Element at a position, or null

Elementul de la o poziție, sau o valoare de rezervă

Valoarea de rezervă de după ?? poate fi calculată. fallback(5) primește indexul și construiește mesajul „The value for index 5 is undefined”. ?? este leneș: funcția rulează doar atunci când elementul lipsește într-adevăr.

Prompt
Creează un tablou cu cuvintele one, two, three, four, five. Citește indexul 5 cu operatorul ?? și cu o funcție de rezervă care primește indexul și construiește textul „The value for index 5 is undefined”. Afișează rezultatul.
Ieșire: script PHP
Element at a position, or a fallback

Obținerea după condiție

Deseori nu cunoști poziția. În schimb cunoști o condiție: primul cuvânt mai lung de 3 litere, ultimul cuvânt care începe cu „f”. Condiția este o funcție care primește un element și returnează true sau false.

Începând cu PHP 8.4 asta se scrie pe un singur rând: array_find() returnează primul element care trece testul — sau null atunci când niciunul nu trece. Așa că „nu s-a potrivit nimic” nu are nevoie de niciun indicator special: este pur și simplu null, iar ?? sau o verificare !== null se ocupă de el.

Nu există o funcție pentru ultima potrivire. Inversează mai întâi tabloul cu array_reverse(): prima potrivire din tabloul inversat este ultima potrivire din cel original.

Prima potrivire

array_find() dă primul cuvânt cu strlen($w) > 3. Acel cuvânt este three.

Prompt
Creează un tablou cu cuvintele one, two, three, four, five. Folosește array_find pentru a găsi primul cuvânt mai lung de 3 litere și afișează-l.
Ieșire: script PHP
First match

Ultima potrivire

array_reverse($words) pune five pe primul loc. array_find() parcurge apoi tabloul inversat și se oprește la primul cuvânt care începe cu f — care este ultimul astfel de cuvânt din tabloul original.

Prompt
Creează un tablou cu cuvintele one, two, three, four, five. Inversează tabloul cu array_reverse și folosește array_find împreună cu str_starts_with pentru a afișa ultimul cuvânt care începe cu „f”.
Ieșire: script PHP
Last match

Prima potrivire, sau null

Niciun cuvânt nu este mai lung de 6 litere, deci array_find() returnează null și ?? "not found" afișează valoarea de rezervă. În tabloul de numere primul număr par este 2, deci verificarea !== null trece și se afișează 2.

Prompt
Ia cuvintele one, two, three, four, five și numerele 1, 2, 3, 4. Caută în cuvinte unul mai lung de 6 litere cu array_find și afișează „not found” prin operatorul ?? atunci când rezultatul este null. Apoi găsește primul număr par și afișează-l după o verificare !== null.
Ieșire: script PHP
First match, or null

Ultima potrivire, sau null

Numerele inversate încep cu 4, iar 4 este par — căutarea nimerește imediat. Dacă nu ar fi existat niciun număr par, array_find() ar fi returnat null și if nu ar fi afișat nimic.

Prompt
Ia numerele 1, 2, 3, 4. Găsește ultimul număr par rulând array_find pe tabloul inversat și afișează-l doar atunci când rezultatul nu este null.
Ieșire: script PHP
Last match, or null

Obținerea unei valori prezente

Un tablou PHP poate conține null pentru a marca o valoare care lipsește. Când vrei doar prima valoare reală, condiția este pur și simplu $v !== null.

array_find() cu acest test returnează primul element care conține într-adevăr o valoare — sau chiar null atunci când tot tabloul este format doar din goluri, ceea ce se citește iarăși firesc cu ??.

Prima valoare care nu este null

Tabloul începe cu un gol: null. Testul $v !== null îl sare, iar array_find() returnează two, prima valoare care este într-adevăr acolo.

Prompt
Creează un tablou care conține null, „two” și „three”. Folosește array_find cu testul că valoarea nu este null și afișează prima valoare care există într-adevăr.
Ieșire: script PHP
First value that is not null

Element aleatoriu

Pentru a alege un element aleatoriu, alege un index aleatoriu. mt_rand($min, $max) returnează un număr întreg între cele două limite, ambele incluse, deci mt_rand(0, count($numbers) - 1) este exact un index valid.

mt_srand(42) pornește generatorul de la o sămânță fixă. Cu aceeași sămânță programul alege de fiecare dată același element, ceea ce face ieșirea previzibilă — acest exemplu folosește o sămânță doar pentru ca rezultatul lui să fie reproductibil. Renunță la mt_srand() atunci când vrei un rezultat diferit la fiecare rulare.

Alegerea unui element aleatoriu

Cu sămânța 42 generatorul alege indexul 2, deci programul afișează 3. Schimbă sămânța și poate ieși un alt număr.

Prompt
Creează un tablou cu numerele 1, 2, 3, 4. Inițializează generatorul aleatoriu cu mt_srand(42), alege un index aleatoriu cu mt_rand de la 0 la numărul de elemente minus 1 și afișează elementul de la acel index.
Ieșire: script PHP
Pick a random element

Verificarea existenței unui element

Pentru a verifica dacă o valoare se află într-un tablou, folosește in_array(). Transmite mereu true ca al treilea argument: acesta cere ca tipul și valoarea să corespundă, așa că șirul de caractere "1" nu este confundat cu numărul 1.

PHP nu are containsAll(). O mică funcție ajutătoare cu array_all() (nouă în PHP 8.4) face treaba: fiecare valoare căutată trebuie să treacă propria verificare in_array().

Un tablou este gol atunci când count($x) === 0 și nu este gol atunci când count($x) > 0. Există și empty($x), mai scurt, dar ai grijă: este true pentru orice valoare falsy — 0, "", null — nu doar pentru tablouri goale, așa că comparația explicită cu count() spune exact ce vrei să spui.

Conține o valoare

four se află în tablou, deci prima verificare afișează true. zero nu se află, deci a doua afișează false. Al treilea argument true face ca in_array() să compare cu ===.

Prompt
Creează un tablou cu cuvintele one, two, three, four, five. Folosește in_array cu comparație strictă pentru a verifica dacă „four” se află în tablou și dacă „zero” se află în tablou. Afișează ambele răspunsuri cu json_encode.
Ieșire: script PHP
Contains one value

Conține toate valorile

Atât four, cât și one se află în tablou, deci containsAll() returnează true. zero lipsește, deci al doilea apel returnează false — array_all() se oprește la prima valoare căutată care nu trece.

Prompt
Scrie o funcție ajutătoare containsAll care returnează true doar atunci când fiecare valoare a unui al doilea tablou se găsește în primul, folosind array_all și in_array strict. Verifică pentru cuvintele one, two, three, four, five dacă există four și one, apoi one și zero. Afișează ambele răspunsuri cu json_encode.
Ieșire: script PHP
Contains all values

Gol sau nu gol

$empty are numărul de elemente 0, deci count($empty) === 0 este true. $words are 5 elemente, deci count($words) > 0 este de asemenea true. json_encode() transformă fiecare valoare booleană în textul true.

Prompt
Creează un tablou cu cuvintele one, two, three, four, five și un tablou gol. Afișează dacă numărul de elemente al tabloului gol este 0, apoi dacă numărul de elemente al tabloului de cuvinte este mai mare decât 0, ambele cu json_encode.
Ieșire: script PHP
Empty or not empty