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:
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;
}
I detta exempel skapas en klass 'MyIterator' som implementerar 'Iterator' gränssnittet, vilket möjliggör intern iteration över en lista med element.