Itererbara

Från Wiki.linux.se
Version från den 14 augusti 2024 kl. 05.18 av Admin (diskussion | bidrag)
Hoppa till navigering Hoppa till sök

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.