Sök…


Introduktion

Loops är en grundläggande aspekt av programmeringen. De tillåter programmerare att skapa kod som upprepas för ett visst antal repetitioner eller iterationer . Antalet iterationer kan vara uttryckliga (till exempel 6 iterationer) eller fortsätta tills vissa villkor är uppfyllda ('tills helvet fryser över').

Detta ämne täcker olika typer av slingor, deras tillhörande kontrollförklaringar och deras potentiella applikationer i PHP.

Syntax

  • för (init-räknare; testräknare; inkrementräknare) {/ * kod * /}
  • förhand (matris som värde) {/ * kod * /}
  • förhand (array som nyckel => värde) {/ * kod * /}
  • medan (villkor) {/ * kod * /}
  • gör {/ * kod * /} medan (villkor);
  • anyloop {fortsätt; }
  • anyloop {[ anyloop ...] {fortsätt int; }}
  • anyloop {break; }
  • anyloop {[ anyloop ...] {break int; }}

Anmärkningar

Det är ofta användbart att utföra samma eller liknande kodblock flera gånger. Istället för att klistra in nästan lika uttalanden ger slingor en mekanism för att köra kod ett specifikt antal gånger och gå över datastrukturer. PHP stöder följande fyra typer av slingor:

  • for
  • while
  • do..while
  • foreach

För att kontrollera dessa slingor, continue och break uttalanden tillgängliga.

för

Uttrycket for används om du vet hur många gånger du vill utföra ett uttalande eller ett uttalande.

Initialiseraren används för att ställa in startvärdet för räknaren för antalet loop-iterationer. En variabel kan förklaras här för detta ändamål och det är traditionellt att namnge det $i .

Följande exempel itererar 10 gånger och visar siffror från 0 till 9.

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++);

Den förväntade produktionen är:

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

för varje

foreach uttalandet används för att gå igenom matriser.

För varje iteration tilldelas värdet för det aktuella arrayelementet till $value -variabeln och matrispekaren flyttas av en och i nästa iteration bearbetas nästa element.

Följande exempel visar objekten i den tilldelade matrisen.

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

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

Den förväntade produktionen är:

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

Du kan också komma åt nyckeln / indexet för ett värde med hjälp av foreach:

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

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

Som standard är $value en kopia av värdet i $list , så ändringar som gjorts inuti slingan kommer inte att återspeglas i $list efteråt.

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

Om du foreach ändra arrayen inom foreach slingan använder du & operatören för att tilldela $value med referens. Det är viktigt att unset variabeln efteråt så att återanvändning av $value någon annanstans inte överskriver matrisen.

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

Du kan också ändra arrayobjekt inom foreach slingan genom att hänvisa till matrisnyckeln för det aktuella objektet.

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

ha sönder

Den break nyckelordet slutar omedelbart strömslingan.

I likhet med continue stoppar ett break utförandet av en slinga. Till skillnad från ett continue uttalande orsakar emellertid break den omedelbara avslutningen av slingan och kör inte det villkorade uttalandet igen.

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

Denna kod kommer att producera

24
30
40
60
120

men kommer inte att utföra fallet där $i är 0, vilket skulle resultera i ett dödligt fel på grund av uppdelning med 0.

Avbrottet kan också användas för att bryta ut från flera nivåer av slingor. Sådant beteende är mycket användbart när du kör kapslade slingor. Till exempel, för att kopiera en rad strängar till en utgångssträng, ta bort eventuella # symboler tills utsträngen är exakt 160 tecken

$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 .= ' ';
}

Kommandot break 2 avslutar omedelbart exekveringen av både de inre och yttre slingorna.

göra medan

do...while uttalandet kommer att köra ett kodblock minst en gång - det kommer då att upprepa slingan så länge ett villkor är sant.

Följande exempel ökar värdet på $i minst en gång, och det fortsätter att öka variabeln $i så länge det har ett värde på mindre än 25;

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

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

Den förväntade produktionen är:

The final value of i is: 25

Fortsätta

continue nyckelordet stoppar den aktuella iterationen av en slinga men avslutar inte slingan.

Precis som break uttalande continue uttalandet ligger inne i slingan. När exekveringen utförs, får continue exekveringen omedelbart hoppar till kretsloppet.

I följande exempel skriver slingan ut ett meddelande baserat på värdena i en matris, men hoppar över ett angivet värde.

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

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

Den förväntade produktionen är:

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

Den continue uttalande kan också användas för att omedelbart fortsätta exekveringen till en yttre nivå av en slinga genom att specificera antalet sling nivåer för att hoppa. Tänk till exempel på data som

Frukt Färg Kosta
Äpple Röd 1
Banan Gul 7
Körsbär Röd 2
Druva Grön 4

För att bara göra pajer av frukt som kostar mindre än 5

$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 */
    }
}

När continue 2 hoppas exekveringen omedelbart tillbaka till $data as $fruit fortsätter den yttre slingan och hoppar över all annan kod (inklusive villkoren i den inre slingan.

medan

while uttalandet kommer att köra ett block med kod om och så länge ett testuttryck är sant.

Om testuttrycket är sant kommer kodblocket att köras. Efter att koden har körts kommer testuttrycket igen att utvärderas och slingan fortsätter tills testuttrycket har visat sig vara felaktigt.

Följande exempel upprepas tills summan når 100 innan den avslutas.

$i = true;
$sum = 0;

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

Den förväntade produktionen är:

The sum is: 100


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow