foreach

Från Wiki.linux.se
Version från den 18 augusti 2024 kl. 07.09 av Admin (diskussion | bidrag) (→‎Sidslut)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök
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