foreach: Skillnad mellan sidversioner
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
Admin (diskussion | bidrag) |
||
Rad 197: | Rad 197: | ||
= Sidslut = | = Sidslut = | ||
Orginalhemsidan på Engelska : | Orginalhemsidan på Engelska : https://www.php.net/manual/en/control-structures.foreach.php | ||
<BR>[[PHP]] | <BR>[[PHP]] | ||
<BR>[[Språkreferens]] | <BR>[[Språkreferens]] | ||
<BR>[[Språkreferens#Kontrollstrukturer]] | <BR>[[Språkreferens#Kontrollstrukturer]] | ||
[[Kategori:Php]] | [[Kategori:Php]] |
Nuvarande version från 18 augusti 2024 kl. 07.09
- foreach
- (PHP 4, PHP 5, PHP 7, PHP 8)
- foreach — En konstruktion för att iterera över arrayer
- foreach fungerar endast på arrayer och objekt och ger ett felmeddelande när du försöker använda den på en variabel med en annan datatyp eller en oinitierad variabel. Det finns två syntaxer:
foreach (iterable_expression as $value) statement foreach (iterable_expression as $key => $value) statement
Den första formen itererar över det itererbara som ges av iterable_expression. Vid varje iteration tilldelas värdet av det aktuella elementet till $value.
Den andra formen tilldelar dessutom det aktuella elementets nyckel till variabeln $key vid varje iteration.
Notera att foreach inte modifierar den interna arraypekaren, som används av funktioner som current() och key().
Det är möjligt att anpassa objektiteration.
För att kunna modifiera arrayelement direkt inom loopen, föregå $value med &. I det fallet tilldelas värdet genom referens.
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr är nu array(2, 4, 6, 8) unset($value); // bryt referensen med det sista elementet ?>
- Varning
- Referensen av $value och det sista arrayelementet kvarstår även efter foreach-loopen. Det rekommenderas att förstöra den med unset(). Annars kommer du att uppleva följande beteende:
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr är nu array(2, 4, 6, 8) // utan ett unset($value), är $value fortfarande en referens till det sista objektet: $arr[3] foreach ($arr as $key => $value) { // $arr[3] kommer att uppdateras med varje värde från $arr... echo "{$key} => {$value} "; print_r($arr); } // ...tills slutligen det näst sista värdet kopieras till det sista värdet // utdata: // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) ?>
Det är möjligt att iterera över en konstants arrays värde med referens:
<?php foreach (array(1, 2, 3, 4) as &$value) { $value = $value * 2; } ?>
- Notera
- foreach stöder inte förmågan att undertrycka felmeddelanden med @.
Flera exempel för att demonstrera användning:
<?php /* foreach exempel 1: endast värde */ $a = array(1, 2, 3, 17); foreach ($a as $v) { echo "Aktuellt värde av \$a: $v.\n"; } /* foreach exempel 2: värde (med dess manuella åtkomstnotation illustrerad) */ $a = array(1, 2, 3, 17); $i = 0; /* endast för illustration */ foreach ($a as $v) { echo "\$a[$i] => $v.\n"; $i++; } /* foreach exempel 3: nyckel och värde */ $a = array( "ett" => 1, "två" => 2, "tre" => 3, "sjutton" => 17 ); foreach ($a as $k => $v) { echo "\$a[$k] => $v.\n"; } /* foreach exempel 4: flerdimensionella arrayer */ $a = array(); $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } /* foreach exempel 5: dynamiska arrayer */ foreach (array(1, 2, 3, 4, 5) as $v) { echo "$v\n"; } ?>
- Packa upp nästlade arrayer med list() ¶
- (PHP 5 >= 5.5.0, PHP 7, PHP 8)
Det är möjligt att iterera över en array av arrayer och packa upp den nästlade arrayen till loopvariabler genom att tillhandahålla en list() som värde.
Till exempel:
<?php $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) { // $a innehåller det första elementet i den nästlade arrayen, // och $b innehåller det andra elementet. echo "A: $a; B: $b\n"; } ?>
Ovanstående exempel kommer att skriva ut:
A: 1; B: 2 A: 3; B: 4 Du kan tillhandahålla färre element i list() än vad som finns i den nästlade arrayen, i vilket fall de överflödiga arrayvärdena kommer att ignoreras:
<?php $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a)) { // Notera att det inte finns något $b här. echo "$a\n"; } ?>
Ovanstående exempel kommer att skriva ut:
1 3 Ett meddelande kommer att genereras om det inte finns tillräckligt med arrayelement för att fylla list():
<?php $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b, $c)) { echo "A: $a; B: $b; C: $c\n"; } ?>
Ovanstående exempel kommer att skriva ut:
- Meddelande
- Undefined offset: 2 i example.php på rad 7
A: 1; B: 2; C:
- Meddelande
- Undefined offset: 2 i example.php på rad 7
A: 3; B: 4; C:
Sidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/control-structures.foreach.php
PHP
Språkreferens
Språkreferens#Kontrollstrukturer