for

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

for-slingor

(PHP 4, PHP 5, PHP 7, PHP 8)

`for`-slingor är de mest komplexa slingorna i PHP. De beter sig som deras motsvarigheter i C. Syntaxen för en `for`-slinga är:

for (uttryck1; uttryck2; uttryck3)
    uttalande

Det första uttrycket (uttryck1) utvärderas (exekveras) en gång ovillkorligt i början av slingan.

I början av varje iteration utvärderas uttryck2. Om det utvärderas till sant fortsätter slingan och de inneslutna uttalandena exekveras. Om det utvärderas till falskt avslutas exekveringen av slingan.

Vid slutet av varje iteration utvärderas uttryck3 (exekveras).

Varje uttryck kan vara tomt eller innehålla flera uttryck separerade med kommatecken. I uttryck2 utvärderas alla uttryck separerade med ett kommatecken, men resultatet tas från den sista delen. Att uttryck2 är tomt innebär att slingan ska köras på obestämd tid (PHP betraktar det implicit som sant, liksom C). Detta kan vara mer användbart än man kan tro, eftersom man ofta vill avsluta slingan med ett villkorligt `break`-uttalande istället för att använda `for`-sanningsuttrycket.

Betrakta följande exempel. Alla visar siffrorna 1 till 10:

<?php
/* exempel 1 */

for ($i = 1; $i <= 10; $i++) {
    echo $i;
}

/* exempel 2 */

for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i;
}

/* exempel 3 */

$i = 1;
for (; ; ) {
    if ($i > 10) {
        break;
    }
    echo $i;
    $i++;
}

/* exempel 4 */

for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>

Naturligtvis verkar det första exemplet vara det trevligaste (eller kanske det fjärde), men du kan finna att möjligheten att använda tomma uttryck i `for`-slingor kommer väl till pass vid många tillfällen.

PHP stöder även den alternativa "kolon syntaxen" för `for`-slingor.

for (uttryck1; uttryck2; uttryck3):
    uttalande
    ...
endfor;

Det är vanligt för många användare att iterera genom arrayer som i exemplet nedan.

<?php
/*
 * Detta är en array med viss data vi vill modifiera
 * när vi kör igenom for-slingan.
 */
$people = array(
    array('name' => 'Kalle', 'salt' => 856412),
    array('name' => 'Pierre', 'salt' => 215863)
);

for($i = 0; $i < count($people); ++$i) {
    $people[$i]['salt'] = mt_rand(000000, 999999);
}
?>

Ovanstående kod kan vara långsam, eftersom arrayens storlek hämtas vid varje iteration. Eftersom storleken aldrig ändras, kan slingan enkelt optimeras genom att använda en mellanliggande variabel för att lagra storleken istället för att upprepade gånger anropa `count()`:

<?php
$people = array(
    array('name' => 'Kalle', 'salt' => 856412),
    array('name' => 'Pierre', 'salt' => 215863)
);

for($i = 0, $size = count($people); $i < $size; ++$i) {
    $people[$i]['salt'] = mt_rand(000000, 999999);
}
?>

Sidslut

Orginalhemsidan på Engelska :
PHP
Språkreferens
Språkreferens#Kontrollstrukturer