Zoeken…


Invoering

Lussen zijn een fundamenteel aspect van programmeren. Hiermee kunnen programmeurs code maken die wordt herhaald voor een bepaald aantal herhalingen of iteraties . Het aantal iteraties kan expliciet zijn (bijvoorbeeld 6 iteraties) of doorgaan totdat aan een voorwaarde is voldaan ('totdat de hel bevriest').

Dit onderwerp behandelt de verschillende soorten lussen, hun bijbehorende besturingsopdrachten en hun mogelijke toepassingen in PHP.

Syntaxis

  • voor (init counter; test counter; increment counter) {/ * code * /}
  • foreach (array as value) {/ * code * /}
  • foreach (array as key => value) {/ * code * /}
  • terwijl (staat) {/ * code * /}
  • doe {/ * code * /} while (staat);
  • anyloop {doorgaan; }
  • anyloop {[ anyloop ...] {ga door int; }}
  • anyloop {break; }
  • anyloop {[ anyloop ...] {break int; }}

Opmerkingen

Het is vaak handig om hetzelfde of een vergelijkbaar codeblok meerdere keren uit te voeren. In plaats van kopiëren en plakken, bieden bijna gelijke instructies loops een mechanisme om code een bepaald aantal keren uit te voeren en over datastructuren te lopen. PHP ondersteunt de volgende vier soorten lussen:

  • for
  • while
  • do..while
  • foreach

Om deze lussen te besturen, zijn continue en break instructies beschikbaar.

voor

De for instructie wordt gebruikt wanneer u weet hoe vaak u een instructie of een blok instructies wilt uitvoeren.

De initialisatie wordt gebruikt om de startwaarde in te stellen voor de teller van het aantal lusiteraties. Hiertoe kan hier een variabele worden gedeclareerd en het is traditioneel om het $i te noemen.

In het volgende voorbeeld wordt 10 keer herhaald en worden getallen van 0 tot 9 weergegeven.

for ($i = 0; $i <= 9; $i++) {
    echo $i, ',';
}

# Example 2
for ($i = 0; ; $i++) {
  if ($i > 9) {
      break;
  }
  echo $i, ',';
}

# Example 3
$i = 0;
for (; ; ) {
    if ($i > 9) {
        break;
    }
    echo $i, ',';
    $i++;
}

# Example 4
for ($i = 0, $j = 0; $i <= 9; $j += $i, print $i. ',', $i++);

De verwachte output is:

0,1,2,3,4,5,6,7,8,9,

foreach

De instructie foreach wordt gebruikt om door arrays te bladeren.

Voor elke iteratie wordt de waarde van het huidige arrayelement toegewezen aan de variabele $value en de arraypointer wordt één voor één verplaatst en in de volgende iteratie wordt het volgende element verwerkt.

In het volgende voorbeeld worden de items in de toegewezen array weergegeven.

$list = ['apple', 'banana', 'cherry'];

foreach ($list as $value) {
    echo "I love to eat {$value}. ";
}

De verwachte output is:

I love to eat apple. I love to eat banana. I love to eat cherry. 

U kunt ook toegang krijgen tot de sleutel / index van een waarde met foreach:

foreach ($list as $key => $value) {
    echo $key . ":" . $value . " ";
}

//Outputs - 0:apple 1:banana 2:cherry

Standaard is $value een kopie van de waarde in $list , dus wijzigingen die in de lus worden aangebracht, worden achteraf niet in $list .

foreach ($list as $value) {
    $value = $value . " pie";
}
echo $list[0]; // Outputs "apple"

Om de array binnen de foreach lus te wijzigen, gebruikt u de operator & om $value toe te wijzen door verwijzing. Het is belangrijk om de variabele achteraf uit te unset , zodat hergebruik van $value de array niet overschrijft.

foreach ($list as &$value) { // Or foreach ($list as $key => &$value) {
    $value = $value . " pie";
}
unset($value);
echo $list[0]; // Outputs "apple pie"

U kunt de foreach binnen de foreach lus ook wijzigen door te verwijzen naar de matrixsleutel van het huidige item.

foreach ($list as $key => $value) {
    $list[$key] = $value . " pie";
}
echo $list[0]; // Outputs "apple pie"

breken

Het break sleutelwoord beëindigt onmiddellijk de huidige lus.

Net als bij de instructie continue stopt een break uitvoering van een lus. In tegenstelling tot een continue verklaring echter break zorgt ervoor dat de onmiddellijke beëindiging van de lus en is de voorwaardelijke instructie niet opnieuw uitvoeren.

$i = 5;
while(true) {
    echo 120/$i.PHP_EOL;
    $i -= 1;
    if ($i == 0) {
        break;
    }
}

Deze code zal produceren

24
30
40
60
120

maar zal niet het geval uitvoeren waarin $i 0 is, wat zou resulteren in een fatale fout vanwege deling door 0.

De break-instructie kan ook worden gebruikt om uit verschillende niveaus van lussen te breken. Dergelijk gedrag is erg handig bij het uitvoeren van geneste lussen. Als u bijvoorbeeld een reeks strings naar een uitvoertekenreeks wilt kopiëren en # symbolen wilt verwijderen, totdat de uitvoertekenreeks exact 160 tekens bevat

$output = "";
$inputs = array(
    "#soblessed #throwbackthursday",
    "happy tuesday",
    "#nofilter",
    /* more inputs */
);
foreach($inputs as $input) {
    for($i = 0; $i < strlen($input); $i += 1) {
        if ($input[$i] == '#') continue;
        $output .= $input[$i];
        if (strlen($output) == 160) break 2; 
    }
    $output .= ' ';
}

Het break 2 commando beëindigt onmiddellijk de uitvoering van zowel de binnenste als de buitenste lussen.

doen terwijl

De instructie do...while While zal een codeblok ten minste eenmaal uitvoeren - het herhaalt dan de lus zolang een voorwaarde waar is.

In het volgende voorbeeld wordt de waarde van $i minimaal één keer verhoogd en wordt de variabele $i verhoogd zolang deze een waarde kleiner dan 25 heeft;

$i = 0;
do {
    $i++;
} while($i < 25);

echo 'The final value of i is: ', $i;

De verwachte output is:

The final value of i is: 25

doorgaan met

Het sleutelwoord continue stopt de huidige iteratie van een lus maar beëindigt de lus niet.

Net als de break instructie bevindt de instructie continue zich in de lus. Wanneer het wordt uitgevoerd, zorgt de instructie continue ervoor dat de uitvoering onmiddellijk naar de voorwaardelijke lus springt.

In het volgende voorbeeld drukt lus een bericht af op basis van de waarden in een array, maar slaat een opgegeven waarde over.

$list = ['apple', 'banana', 'cherry'];

foreach ($list as $value) {
    if ($value == 'banana') {
        continue;
    }
    echo "I love to eat {$value} pie.".PHP_EOL;
}

De verwachte output is:

I love to eat apple pie.
I love to eat cherry pie.

De instructie continue kan ook worden gebruikt om de uitvoering onmiddellijk voort te zetten naar een buitenste niveau van een lus door het aantal te springen lusniveaus op te geven. Overweeg bijvoorbeeld gegevens zoals

Fruit Kleur Kosten
appel Rood 1
Banaan Geel 7
Kers Rood 2
Druif Groen 4

Om alleen taarten te maken van fruit dat minder dan 5 kost

$data = [
    [ "Fruit" => "Apple",  "Color" => "Red",    "Cost" => 1 ],
    [ "Fruit" => "Banana", "Color" => "Yellow", "Cost" => 7 ],
    [ "Fruit" => "Cherry", "Color" => "Red",    "Cost" => 2 ],
    [ "Fruit" => "Grape",  "Color" => "Green",  "Cost" => 4 ]
];

foreach($data as $fruit) {
    foreach($fruit as $key => $value) {
        if ($key == "Cost" && $value >= 5) {
            continue 2;
        }
        /* make a pie */
    }
}

Wanneer de instructie continue 2 wordt uitgevoerd, springt de uitvoering onmiddellijk terug naar $data as $fruit de buitenste lus voortzet en alle andere code overslaat (inclusief de voorwaardelijke in de binnenste lus).

terwijl

De while zal een codeblok uitvoeren als en zolang een testexpressie waar is.

Als de testexpressie waar is, wordt het codeblok uitgevoerd. Nadat de code is uitgevoerd, wordt de testuitdrukking opnieuw geëvalueerd en gaat de lus door totdat de testuitdrukking onwaar blijkt te zijn.

Het volgende voorbeeld herhaalt zich totdat de som 100 bereikt voordat deze wordt beëindigd.

$i = true;
$sum = 0;

while ($i) {
    if ($sum === 100) {
        $i = false;
    } else {
        $sum += 10;
    }
}
echo 'The sum is: ', $sum;

De verwachte output is:

The sum is: 100


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow