Ce face iterator_to_array
Generatoarele (funcții cu yield) și obiectele iterator se pot parcurge cu foreach, dar nu se pot folosi cu funcțiile pentru tablouri. iterator_to_array le transformă într-un tablou.
Implicit cheile sunt păstrate. Dacă iteratorul dă aceeași cheie de mai multe ori, rămâne doar ultima valoare. Cu $preserve_keys = false primești o listă cu chei 0, 1, 2…
Parametri
| Parametru | Descriere |
|---|---|
$iterator |
Iteratorul, generatorul sau (din PHP 8.2) tabloul copiat. |
$preserve_keys |
Opțional. false renumerotează cheile. |
Ce returnează
Un tablou cu elementele.
Exemple
Exemplul 1: Un generator transformat în tablou
<?php
function pare(int $max): Generator
{
for ($i = 2; $i <= $max; $i += 2) {
yield $i;
}
}
print_r(iterator_to_array(pare(8)));
Rezultat
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
)
Exemplul 2: Chei repetate
<?php
function note(): Generator
{
yield "Ana" => 9;
yield "Mihai" => 7;
yield "Ana" => 10;
}
print_r(iterator_to_array(note()));
print_r(iterator_to_array(note(), false));
Rezultat
Array
(
[Ana] => 10
[Mihai] => 7
)
Array
(
[0] => 9
[1] => 7
[2] => 10
)
Greșeli frecvente
- Parcurgi un generator de două ori. După prima parcurgere este închis și primești
Exception: Cannot traverse an already closed generator. Salvează rezultatul luiiterator_to_arraysau creează un generator nou.
Comenzi înrudite
iterator_count: Numără elementele unui iterator sau generator, parcurgându-l până la capăt.iterator_apply: Apelează o funcție pentru fiecare element al unui iterator, cât timp funcția returnează true.is_iterable: Verifică dacă o valoare poate fi parcursă cu foreach: un tablou sau un obiect Traversable.