Treci la conținutul principal

Transformarea unei colecții

O transformare pornește de la o colecție, de exemplu un tablou, și construiește din ea o colecție nouă. Originalul nu este modificat.

Tablourile din PHP vin cu o familie mare de funcții deja gata pentru asta: array_map aplică o funcție fiecărui element, array_merge unește tablouri, array_combine lipește cheile la valori, array_column alege o singură poziție din fiecare rând, iar implode transformă un tablou în text. Acolo unde nicio funcție gata făcută nu se potrivește, o buclă foreach scurtă rezolvă treaba.

Același tablou PHP funcționează și ca listă, și ca depozit de tip cheie:valoare. O listă simplă are cheile 0, 1, 2 și așa mai departe; un tablou asociativ are cheile alese de tine. Amândouă păstrează intrările în ordinea inserării și amândouă sunt folosite în această pagină.


Map

Operația map aplică aceeași funcție fiecărui element și adună răspunsurile într-un tablou nou, de aceeași lungime. De exemplu, poate transforma 1, 2, 3 în 3, 6, 9.

În PHP asta face exact array_map: primește mai întâi funcția și apoi tabloul și întoarce un tablou nou. Funcția este adesea o funcție-săgeată scurtă, precum fn($x) => $x * 3.

array_map nu modifică niciodată tabloul original. Construiește și întoarce unul nou, așa că le poți păstra pe amândouă.

Map cu array_map

array_map apelează funcția-săgeată pe fiecare element și întoarce un tablou nou. Aici înmulțește fiecare număr cu 3, iar implode afișează noul tablou ca 3, 6, 9.

Prompt
Folosește array_map cu o funcție-săgeată pentru a înmulți cu 3 fiecare număr din tabloul 1, 2, 3. Afișează noul tablou cu implode.
Ieșire: script PHP
Map with array_map

Map cu indicele

Uneori contează și poziția elementului. foreach îți dă atât cheia, cât și valoarea, iar într-o listă simplă cheile sunt chiar pozițiile 0, 1, 2. Aici fiecare valoare este înmulțită cu propriul indice, așa că programul afișează 0, 2, 6.

Prompt
Parcurge tabloul 1, 2, 3 cu foreach, folosind atât cheia, cât și valoarea. Construiește un tablou nou în care fiecare element este valoare * indice, apoi afișează-l cu implode.
Ieșire: script PHP
Map with the index

Sari peste unele rezultate

Uneori unele rezultate trebuie eliminate. Întoarce null pentru ele, apoi scoate valorile null cu array_filter. Atenție: array_filter păstrează cheile originale, așa că tabloul filtrat are în continuare cheile 0 și 2, iar json_encode îl afișează ca {"0":3,"2":9}. array_values îl reindexează într-o listă curată: [3,9].

Prompt
Aplică map pe tabloul 1, 2, 3 astfel încât 2 să devină null, iar celelalte numere să fie înmulțite cu 3. Elimină valoarea null cu array_filter și afișează tabloul filtrat cu json_encode pentru a arăta că cheile originale sunt păstrate, apoi reindexează-l cu array_values și afișează-l din nou.
Ieșire: script PHP
Skip some results

Transformarea cheilor unui tablou

Pentru a schimba cheile unui tablou asociativ, transformă cheile și lipește-le din nou la valori. array_keys dă toate cheile, array_map('strtoupper', ...) le scrie cu majuscule, iar array_combine împerechează noile chei cu vechile valori.

Prompt
Pornește de la un tablou asociativ de la „key1” la 1 și de la „key2” la 2. Construiește un tablou nou cu aceleași valori, dar cu fiecare cheie scrisă cu majuscule, folosind array_keys, array_map și array_combine. Afișează noul tablou cu json_encode.
Ieșire: script PHP
Transform array keys

Transformarea valorilor unui tablou

Pentru a schimba valorile, păstrează cheile și calculează valori noi. array_map poate parcurge două tablouri în același timp — aici cheile și valorile — astfel încât fiecare valoare nouă este vechea valoare plus lungimea cheii sale: 1 + strlen("key1") este 5.

Prompt
Pornește de la un tablou asociativ de la „key1” la 1 și de la „key2” la 2. Construiește un tablou nou cu aceleași chei, în care fiecare valoare este vechea valoare plus lungimea cheii sale. Afișează noul tablou cu json_encode.
Ieșire: script PHP
Transform array values

Zip

Operația zip ia două tablouri și împerechează elementele lor după poziție: primul cu primul, al doilea cu al doilea și așa mai departe.

PHP are un idiom clasic pentru asta: array_map(null, $a, $b). Când callback-ul este null și există mai multe tablouri, array_map construiește un tablou de perechi. Observă că nu se oprește la tabloul mai scurt — locurile lipsă sunt completate cu null — așa că fă zip pe tablouri de aceeași lungime sau taie mai întâi pe cel mai lung cu array_slice.

Zip pe două tablouri

Cu null pe post de callback, array_map împerechează cele două tablouri într-un tablou de tablouri cu două elemente. json_encode arată tot rezultatul pe un singur rând.

Prompt
Combină element cu element tablourile red, brown, grey și fox, bear, wolf într-un tablou de perechi, folosind array_map cu null pe post de callback. Afișează perechile cu json_encode.
Ieșire: script PHP
Zip two arrays

Zip cu o transformare

Nu ai nevoie întotdeauna de perechile în sine. Dă-i lui array_map un callback adevărat și ambele tablouri, iar el apelează funcția cu un element din fiecare. ucfirst scrie cu majusculă prima literă a numelui animalului.

Prompt
Combină element cu element tablourile red, brown, grey și fox, bear, wolf folosind array_map. Pentru fiecare pereche construiește o propoziție de forma „The Fox is red”, cu prima literă a animalului scrisă cu majusculă, și afișează o propoziție pe rând.
Ieșire: script PHP
Zip with a transformation

Unzip pe un tablou de perechi

Operația unzip este inversa: un tablou de perechi devine două tablouri. array_column adună elementul de la o poziție din fiecare pereche — poziția 0 dă cuvintele, iar poziția 1 dă numerele.

Prompt
Pornește de la un tablou de perechi: one cu 1, two cu 2, three cu 3. Împarte-l într-un tablou de cuvinte și un tablou de numere folosind array_column și afișează fiecare tablou pe rândul său cu implode.
Ieșire: script PHP
Unzip an array of pairs

Associate

Operația associate construiește un tablou asociativ dintr-o listă. Fiecare element îți dă o cheie și o valoare. Un tablou nu poate conține aceeași cheie de două ori, așa că, dacă două elemente produc aceeași cheie, câștigă cel de mai târziu.

Șablonul este o buclă foreach simplă: pornește de la un tablou gol și atribuie $result[$key] = $value pentru fiecare element. PHP păstrează intrările în ordinea în care au fost adăugate.

Elementele pe post de chei

Elementul însuși devine cheie, iar valoarea este calculată din el. Aici cuvintele sunt chei, iar lungimile lor sunt valori, așa că programul afișează {"one":3,"two":3,"three":5}.

Prompt
Construiește un tablou asociativ din cuvintele one, two, three în care fiecare cuvânt este o cheie, iar lungimea lui este valoarea. Afișează tabloul cu json_encode.
Ieșire: script PHP
Elements as keys

Elementele pe post de valori

Elementul devine valoare, iar cheia este calculată din el. Aici cheia este prima literă scrisă cu majusculă, luată cu $word[0] și strtoupper. Atât two, cât și three încep cu T, așa că three îl înlocuiește pe two și tabloul are doar două intrări.

Prompt
Construiește un tablou asociativ din cuvintele one, two, three în care cheia este prima literă a cuvântului scrisă cu majusculă, iar valoarea este cuvântul însuși. Afișează tabloul cu json_encode și observă că „three” înlocuiește „two” la cheia T.
Ieșire: script PHP
Elements as values

Calculează atât cheia, cât și valoarea

Poți calcula din element atât cheia, cât și valoarea. Aici cheia este prima literă, iar valoarea este lungimea cuvântului. Din nou câștigă intrarea T de mai târziu.

Prompt
Construiește un tablou asociativ din cuvintele one, two, three în care cheia este prima literă scrisă cu majusculă, iar valoarea este lungimea cuvântului. Afișează tabloul cu json_encode.
Ieșire: script PHP
Compute both key and value

Cheia și valoarea dintr-un singur element

Uneori un singur element conține ambele părți. explode împarte un nume complet la spațiu într-un tablou de cuvinte, iar atribuirea de listă [$first, $last] = ... îl despachetează. Numele de familie devine cheie, iar prenumele devine valoare.

Prompt
Pornește de la numele complete „Alice Adams” și „Brian Brown”. Împarte fiecare nume în cuvinte cu explode și construiește un tablou asociativ de la numele de familie la prenume. Afișează tabloul cu json_encode.
Ieșire: script PHP
Key and value from one element

Flatten

Operația flatten transformă o colecție imbricată, de exemplu un tablou de tablouri, într-un singur tablou simplu, cu toate elementele în ordine.

În PHP, array_merge unește oricâte tablouri, iar cele trei puncte împrăștie tablourile interioare în apel: array_merge(...$nested).

Aplatizarea unui tablou de tablouri

Cele trei puncte transformă array_merge(...$numberSets) în array_merge([1, 2, 3], [4, 5, 6]). Două tablouri interioare de câte trei numere devin un singur tablou de șase.

Prompt
Pornește de la un tablou de tablouri: 1, 2, 3 și 4, 5, 6. Aplatizează-l într-un singur tablou folosind array_merge cu operatorul ..., apoi afișează-l cu implode.
Ieșire: script PHP
Flatten an array of arrays

Aplatizarea valorilor din obiecte

Un flat map ia mai întâi un tablou din fiecare element, apoi unește toate acele tablouri. array_map citește proprietatea $values a fiecărui container, iar array_merge cu cele trei puncte lipește cele trei tablouri într-unul singur.

Prompt
Definește o clasă Container cu o proprietate de tip tablou numită values. Creează trei containere care conțin one, two, three; four, five; și six, seven, eight. Adună toate valorile lor într-un singur tablou cu array_map și array_merge și afișează-l cu implode.
Ieșire: script PHP
Flatten values from objects

Reprezentarea ca șir de caractere

Adesea vrei să arăți o colecție ca text ușor de citit, de exemplu cu virgule între elemente.

În PHP, implode primește un separator și un tablou și întoarce un singur șir de caractere. Numerele sunt transformate automat în text. Extrele — un prefix, un postfix, o limită sau o transformare — se fac cu concatenare de șiruri de caractere, cu array_slice sau cu array_map înainte de unire.

Unirea cu un separator

implode pune ", " între cuvinte și întoarce un singur șir de caractere.

Prompt
Unește cuvintele one, two, three într-un singur șir de caractere, cu ", " între ele, folosind implode. Afișează șirul de caractere.
Ieșire: script PHP
Join with a separator

Adăugarea unui prefix și a unui postfix

Un prefix și un postfix sunt doar text în jurul rezultatului unit. În PHP le adaugi cu operatorul ..

Prompt
Unește cuvintele one, two, three cu " | " între ele, adaugă prefixul "start: " și postfixul ": end", apoi afișează rezultatul.
Ieșire: script PHP
Add a prefix and a postfix

Limitarea numărului de elemente

Pentru un tablou lung poate vrei să arăți doar primele câteva elemente. range(1, 100) construiește numerele, array_slice($numbers, 0, 10) ia primele 10, iar "...>" este adăugat la final pentru a arăta că restul elementelor au fost tăiate. implode transformă singur numerele în text.

Prompt
Creează un tablou cu numerele de la 1 la 100 folosind range. Unește doar primele 10 dintre ele cu ", ", luate cu array_slice, și adaugă „<...>” la final pentru a arăta că lista a fost tăiată. Afișează rezultatul.
Ieșire: script PHP
Limit the number of elements

Transformarea fiecărui element înainte de unire

Pentru a schimba fiecare element înainte de unire, transformă mai întâi tabloul cu array_map, apoi aplică implode pe rezultat. Aici fiecare cuvânt devine "Element: " plus cuvântul scris cu majuscule.

Prompt
Transformă fiecare dintre cuvintele one, two, three în "Element: " urmat de cuvântul scris cu majuscule, folosind array_map. Unește rezultatele cu ", " și afișează șirul de caractere.
Ieșire: script PHP
Transform each element before joining