Itererbara: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
Ingen redigeringssammanfattning
Ingen redigeringssammanfattning
Rad 16: Rad 16:
?>
?>
</code>
</code>
== 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.

Versionen från 14 augusti 2024 kl. 05.17

// 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.