Itererbara: Skillnad mellan sidversioner
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
Admin (diskussion | bidrag) 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.