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