Kom igång med Php (4/7)
Det är ganska vanligt att behöva upprepa saker fler gånger när man programmerar. För att inte behöva skriva samma sak om och om igen finns det väldigt bra och enkla sätt att utföra repetitioner. Detta kallas bland annat för loop, repetering, upprepning eller iteration.
for-loopen
Det första exemplet på upprepning, vi ska lära oss, är for-loopen. Med denna loop kan vi repetera något det antal gånger vi vill. Så här ser for-loopen ut:
for ($i = 0; $i < 7; $i++)
{
echo "Hej";
}
Koden ovan kommer att generera följande:
HejHejHejHejHejHejHej
Om vi går igenom loopen, del för del, kan vi förstå varför mycket enkelt. Första delen, $i = 0, sätter att variabeln $i ska vara lika med 0 när loopen startar. Nästa del, $i < 7, betyder att loopen ska fortsätta att upprepa så länge detta påstående är sant. Alltså så länge $i är mindre än 7 kommer vi att skriva Hej. Sista delen, $i++, är ett förkortat skrivsätt av, $i = $i + 1;. Med andra ord så ökar vi variabeln $i med 1 varje gång loopen körs.
Vi kan visa detta genom att skriva ut variabeln $i brevid varje Hej.
for ($i = 0; $i < 7; $i++)
{
echo "(i=$i)Hej ";
}
Detta ger följande:
(i=0)Hej (i=1)Hej (i=2)Hej (i=3)Hej (i=4)Hej (i=5)Hej (i=6)Hej
Programmet tänker på följande sätt:
Är 0 < 7? - Ja, vi skriver "Hej" och plussar på 1 på $i
Är 1 < 7? - Ja, vi skriver "Hej" och plussar på 1 på $i
Är 2 < 7? - Ja, vi skriver "Hej" och plussar på 1 på $i
Är 3 < 7? - Ja, vi skriver "Hej" och plussar på 1 på $i
Är 4 < 7? - Ja, vi skriver "Hej" och plussar på 1 på $i
Är 5 < 7? - Ja, vi skriver "Hej" och plussar på 1 på $i
Är 6 < 7? - Ja, vi skriver "Hej" och plussar på 1 på $i
Är 7 < 7? - Nej! Vi skriver inte ut något och avslutar
while-loopen
Det finns en annan loop som heter while. While betyder "medan", och det beskriver denna loop väldigt bra. Denna loop repeterar medan ett påstående är sant.
Vi kan använda while-loopen precis på samma sätt som en for-loop så här:
$i = 0;
while ($i < 7)
{
echo "Hej";
$i++;
}
Denna kod ger exakt samma resultat som det första exemplet på for-loopen. Det vi först gör är att sätta en variabel, $i, att vara lika med 0 redan ovanför vår loop. Sedan säger vi åt loopen att, medan $i < 7, så skriver vi Hej och plussar på 1 på $i.
While-loopen är dock mycket mer dynamisk än for-loopen. Vi behöver inte räkna upp till ett specifikt värde med while. Det räcker med ett påstående som blir falsk inom överskådlig framtid. Blir påståendet aldrig falskt kommer loopen att snurra i all evighet och vi får ett felmeddelande.
foreach-loopen
foreach-loopen hjälper oss att loopa igenom en array. Det går givetvis att loopa igenom en array med de vanliga for- eller while-looparna. Men har vi gjort en array, med namn istället för siffror, som index blir det lite knepigare. for each, betyder för varje och det är precis vad loopen gör, den loopar ett varv för varje värde i en array.
Exempel:
$myArray = array("Låda_1" => "Innehåll 1",
"Låda_2" => "Innehåll 2",
"Låda_3" => "Innehåll 3",
"Låda_4" => "Innehåll 4");
foreach ($myArray as $content)
{
echo $content . "
";
}
Ovanstående ger följande:
Innehåll 1
Innehåll 2
Innehåll 3
Innehåll 4
Det finns en till väldigt användbar funktion i foreach-loopen. Vi kan nämligen få veta vilken låda, vilket index, varje innehåll finns i.
Exempel:
$myArray = array("Låda_1" => "Innehåll 1",
"Låda_2" => "Innehåll 2",
"Låda_3" => "Innehåll 3",
"Låda_4" => "Innehåll 4");
foreach ($myArray as $box => $content)
{
echo "$box innehåller: $content
";
}
Ovanstående ger följande:
Låda_1 innehåller: Innehåll 1
Låda_2 innehåller: Innehåll 2
Låda_3 innehåller: Innehåll 3
Låda_4 innehåller: Innehåll 4
Prova själv
Vi har följande arrayer:
$car1 = array("max_speed" => "340km/h",
"style" => "Snygg");
$car2 = array("max_speed" => "110km/h",
"style" => "Ful");
$car3 = array("max_speed" => "50km/h",
"style" => "Superdupersnygg");
$cars = array("bil1" => $car1,
"bil2" => $car2,
"bil3" => $car3);
Försök genom att loopa ut värderna ut variabeln $cars få följande resultat:
bil1:
speed: 340km/h
style: Snygg
bil2:
speed: 110km/h
style: Ful
bil3:
speed: 50km/h
style: Superdupersnygg