Itererbara
Iterable
// Iterable är en inbyggd kompileringstids typalias för array|Traversable. Från dess införande i PHP 7.1.0 och fram till PHP 8.2.0 var iterable en inbyggd pseudotyp som fungerade som den nämnda typaliasen och kan användas som en typdeklaration. En iterable-typ kan användas i foreach och med yield from inom en generator.
Notera:
Funktioner som deklarerar iterable som returtyp kan också vara generatorer.
Exempel #1 Exempel på generator med iterable returtyp
<?php
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
?>
Exempel
PHP Iterables
I PHP är en 'itererbar' en datatyp som kan användas i en loop för att gå igenom elementen i en samling. PHP stöder två typer av itererbara: arrayer och objekt som implementerar Iterator eller IteratorAggregate gränssnittet.
Exempel 1: Enkel Array
En vanlig array kan användas direkt i en 'foreach'-loop: <source lang="php"> $fruits = ['apple', 'banana', 'cherry']; foreach ($fruits as $fruit) {
echo $fruit . PHP_EOL;
} </source> I det här exemplet itereras över en array med fruktnamn och varje frukt skrivs ut.
Exempel 2: Associerativ Array
En associerativ array, där varje element har en nyckel och ett värde, kan också itereras: <source lang="php"> $capitals = [
'Sweden' => 'Stockholm', 'Norway' => 'Oslo', 'Finland' => 'Helsinki'
]; foreach ($capitals as $country => $capital) {
echo "The capital of $country is $capital" . PHP_EOL;
} </source> Detta exempel visar hur man använder 'foreach' för att få tillgång till både nyckeln (landet) och värdet (huvudstaden).
Exempel 3: Objekt som Implementerar 'Iterator'
Objekt som implementerar 'Iterator' gränssnittet kan användas i en 'foreach'-loop lika enkelt som en array: <source lang="php"> class MyIterator implements Iterator {
private $items = []; private $index = 0;
public function __construct($items) { $this->items = array_values($items); }
public function current() { return $this->items[$this->index]; }
public function key() { return $this->index; }
public function next() { ++$this->index; }
public function rewind() { $this->index = 0; }
public function valid() { return isset($this->items[$this->index]); }
}
$iterator = new MyIterator(['apple', 'banana', 'cherry']); foreach ($iterator as $item) {
echo $item . PHP_EOL;
} </source> I detta exempel skapas en klass 'MyIterator' som implementerar 'Iterator' gränssnittet, vilket möjliggör intern iteration över en lista med element.