iterator_to_array în PHP

Tablouri (array) PHP 5.1+ (tablouri acceptate: PHP 8.2+)

Copiază toate elementele unui iterator sau generator într-un tablou obișnuit.

Sintaxă
iterator_to_array(Traversable|array $iterator, bool $preserve_keys = true): array

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 lui iterator_to_array sau 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.