is_iterable în PHP

Verifică dacă o valoare poate fi parcursă cu foreach: un tablou sau un obiect Traversable.

Sintaxă
is_iterable(mixed $value): bool

Ce face is_iterable

is_iterable returnează true pentru tablouri și pentru obiectele care implementează Traversable: generatoare, ArrayIterator, ArrayObject și altele.

Un obiect obișnuit (stdClass) poate fi parcurs cu foreach, dar nu este considerat iterabil. La fel, textele nu sunt iterabile.

Parametri

Parametru Descriere
$value Valoarea verificată.

Ce returnează

true dacă valoarea este tablou sau Traversable, altfel false.

Exemple

Exemplul 1: Ce este iterabil

<?php
function numere(): Generator
{
    yield 1;
}

var_dump(is_iterable([1, 2]));
var_dump(is_iterable(numere()));
var_dump(is_iterable(new stdClass()));
var_dump(is_iterable("abc"));

Rezultat

bool(true)
bool(true)
bool(false)
bool(false)

Exemplul 2: O funcție care primește tablou sau generator

<?php
function suma(mixed $valori): int
{
    if (!is_iterable($valori)) {
        return 0;
    }
    $total = 0;
    foreach ($valori as $v) {
        $total += $v;
    }
    return $total;
}

echo suma([10, 20]) . "\n";
echo suma(new ArrayIterator([1, 2, 3])) . "\n";
echo suma(null);

Rezultat

30
6
0

Greșeli frecvente

  • Folosești is_array și refuzi generatoarele și iteratorii. Dacă doar parcurgi datele cu foreach, verifică cu is_iterable sau declară tipul iterable.

Comenzi înrudite

  • is_array: Verifică dacă o valoare este un tablou (array).
  • is_countable: Verifică dacă o valoare poate fi numărată cu count: un tablou sau un obiect Countable.
  • iterator_to_array: Copiază toate elementele unui iterator sau generator într-un tablou obișnuit.