Php-utførelse av en tilstand inne i en loop. PHP: Løkker

9 år siden

Bare en merknad om bruk av continue-setningen for å gi avkall på resten av en løkke - sørg for at du ikke utsteder continu-setningen fra en SWITCH-sak - å gjøre det vil ikke fortsette while-løkken, men heller selve switch-setningen.

Selv om det kan virke åpenbart for noen, tok det litt testing for meg, så forhåpentligvis hjelper dette noen andre.

1 år siden

$i = - 1 ;
mens ($i) (
ekko $i++;
}
?>
gir ut "-1" og stopper deretter fordi "0" (null) blir evaluert som FALSE.

dette viser hvorfor det er viktig for en PDO-setning som henter en kolonneverdi inne i en while-løkke for å teste eksplisitt for FALSE.

4 år siden

Er rart at det står i manualen...
"Noen ganger, hvis while-uttrykket evalueres til FALSE helt fra begynnelsen, vil de nestede setningene" ikke en gang kjøres én gang. "

For det kan ikke være NOEN GANGER

Hvis det oppfører seg slik, så er det en feil, fordi det ALLTID ikke må kjøre de nestede setningene selv én gang hvis WHILE-uttrykket evalueres til FALSE helt fra begynnelsen.

En annen måte å gå ut av while-løkken er ved å bruke BREAK-setningen. Se den i manualen.

Og hvis uttrykket evalueres til NULL er det samme som FALSE
while (uttrykket endres til NULL)( )

17 år siden

På slutten av while-løkken (liste/hver) vil matrisepekeren være på slutten.
Dette betyr at den andre while-løkken på den matrisen vil bli hoppet over!

Du kan sette array-pekeren tilbake med reset($myArray)-funksjonen.

$myArray =array("aa" , "bb" , "cc" , "dd" );
reset($myArray);
while (liste ($key , $val ) = hver ($myArray )) echo $val ;
?>

3 år siden

Enkelt pyramidemønsterprogram med while-løkke
$i = 1 ;
mens($i<= 5 )
{
$j = 1 ;
mens($j<= $i )
{
ekko "*  " ;
$j++;
}
ekko "
" ;
$i++;
}
?>
// eller alternativt kan du bruke:
$i = 1 ;
mens($i<= 5 ):

$j = 1 ;
mens($j<= $i ):
ekko "*  " ;
$j++;
endwhile;

Ekko"
" ;
$i++;
endwhile;
?>

6 år siden

I stedet for denne bruken;

$arr = array("oransje" , "banan" , "eple" , "bringebær" );

$i = 0 ;
mens ($i< count ($arr )) {
$a = $arr [ $i ];
ekko $a. "\n" ;
$i++;
}
// eller
$i = 0 ;
$c = count($arr);
mens ($i< $c ) {
$a = $arr [ $i ];
ekko $a. "\n" ;
$i++;
}
?>

Dette kan være mer effektivt;

mens ($a = $arr [ 1 * $i++]) ekko $a . "\n" ;
?>

13 år siden

Bare en konstruksjonsnotat til stuart - årsaken til denne oppførselen er fordi bruk av while(verdi = hver(array)) øker den interne telleren til arrayen når den går gjennom. Derfor, hvis du har tenkt å gjenta løkken, må du tilbakestille telleren. f.eks:

$one = array("10", "20", "30", "40");
$two = array("a", "b", "c", "d");

$i=0;
mens($i< count($one)) {
reset($to);
mens($a = hver($to)) (
echo $a." - ".$one[$i].", ";
}
$i++;

a - 10, b - 10, c - 10, d - 10, a - 20, b - 20, c - 20, d - 20, a - 30, b - 30, c - 30, d - 30, a - 40, b - 40, c - 40, d - 40,

14 år siden

Mens kan gjøre underverker om du trenger noe for å skrive til en fil i kø mens noe annet har tilgang til det.

Her er mitt enkle eksempel:

Funksjon skrive ($data, $file, $write_mode = "w") (
$lock = $fil . ".lås" ;
// kjør skriverettingen for å stoppe eventuelle sammenstøt som kan oppstå
skrive_fiks($lås);
// lag en ny låsefil etter write_fix() for denne skriveøkten
touch($lås);
// skriv til filen din
$open = fopen ($fil, $skrivemodus);
fwrite ($open, $data);
fclose($åpen);
// drep din nåværende lås
unlink ($lock);
}

Funksjon write_fix ($lock_file) (
while(fil_eksisterer ($lås_fil)(
// gjøre noe her?
// kanskje sove noen mikrosekunder
// for å opprettholde stabilitet, hvis dette skal
// ta en stund ??
}
}

?>

Denne metoden anbefales ikke for bruk med programmer som vil trenge noen få sekunder for å skrive til en fil, siden while-funksjonen vil spise opp mange prosesssykluser. Imidlertid fungerer denne metoden, og er enkel å implementere. Den grupperer også skrivefunksjonene i én brukervennlig funksjon, noe som gjør livet enklere. :-)

3 år siden

En kul måte å fortsette å evaluere noe på til det ikke består en test.

mens (sant) (
if ("test") ( // er startbetingelsen sann
// gjør noe som også endrer starttilstand
) else ( // betingelse mislyktes
gå i stykker; // la løkke
}
}
?>

2 år siden

// test While Vs For php 5.6.17

$t1 = mikrotid(true);
$a = 0 ;
while($a++<= 1000000000 );
$t2 = mikrotid(true);
$x1 = $t2 - $t1 ;
echo PHP_EOL , " > while($a++<= 100000000); : " , $x1 , "s" , PHP_EOL ;

$t3 = mikrotid(true);
for($a = 0 ; $a<= 1000000000 ; $a ++);
$t4 = mikrotid(true);
$x2 = $t4 - $t3 ;
echo PHP_EOL , "> for($a=0;$a<= 100000000;$a++); : " , $x2 , "s" , PHP_EOL ;

$t5 = mikrotid(true);
$a = 0 ; for(; $a++<= 1000000000 ;);
$t6 = mikrotid(true);
$x3 = $t6 - $t5 ;
echo PHP_EOL , " > $a=0; for(;$a++<= 100000000;); : " , $x3 , "s" , PHP_EOL ;

//> while($a++<= 100000000); = 18.509671926498s
//> for($a=0;$a<= 100000000;$a++); = 25.450572013855s
//> $a=0; for(;$a++<= 100000000;); = 22.614907979965s

// ===================

//> while($a++ != 100000000); : 18.204656839371s
//> for($a=0;$a != 100000000;$a++); : 25.025605201721s
//> $a=0; for(;$a++ != 100000000;); : 22.340576887131s

// ===================

//> while($a++< 100000000); : 18.383454084396s
//> for($a=0;$a< 100000000;$a++); : 25.290743112564s
//> $a=0; for(;$a++< 100000000;); : 23.28609919548s

?>

15 år siden

Jeg laget en test som krysser en matrise (enkel, men lang, numerisk matrise med numeriske taster). Testen min hadde en syklus per metode, og multipliserte hvert array-element med 100. Dette var resultatene mine:

******************************************************
30870 Element Array Traversing


0,2373 seg senere -> while (liste ($key, $val) = hver ($array)) ENDS


0.1916 seg senere -> while (liste ($key,) = each ($array)) ENDS


0,1714 seg senere -> foreach ($array AS $key=>$value) ENDS


0,0255 seg senere -> while ($next = next($array)) ENDS


0,1735 seg senere -> foreach ($array AS $value) ENDS
**************************************************************

foreach er fetere enn en stund (liste - hver), sant.
Mens (neste) var imidlertid raskere enn foreach.

Dette var vinnerkodene:

$array = $save;
test_tid("",1);
foreach ($array AS $key=>$value)
test_time("foreach (\$array AS \$key=>\$verdi)");

$array = $save;
test_tid("",1);
reset($array);
while ($next = next($array))
( $nøkkel = nøkkel($array);
$array[$key] = $array[$key] * 100;
}
test_time("mens (\$neste = neste(\$array))");
*********************************************************
Forbedringen virker enorm, men den er ikke så dramatisk i praksis. Resultatene varierte... Jeg har en veldig lang todimensjonal matrise, og så ikke mer enn en forskjell på 2 sekunder, men på 140+ sekunders skript. Legg imidlertid merke til at du mister kontrollen over $nøkkelverdien (med mindre du har numeriske taster, noe jeg pleier å unngå), men det er ikke alltid nødvendig.

Jeg holder meg generelt til foreach. Denne gangen fikk jeg imidlertid feil med tillatt minnestørrelse overskredet med Apache. Husk at foreach kopierer den originale matrisen, så dette lager nå to enorme 2D-matriser i minnet og mye arbeid for Apache. Hvis du får denne feilen, sjekk løkkene dine. Ikke bruk hele matrisen på en foreach. Få i stedet nøklene og få direkte tilgang til cellene. Prøv også å bruke unset og Referencing på de enorme matrisene.

Å jobbe med matrisen og loopene er en mye bedre løsning enn å lagre til midlertidige tabeller og deaktivere (mye tregere).

For 10 år siden

På grunn av det faktum at php bare tolker de nødvendige elementene for å få et resultat, fant jeg det praktisk å sette sammen forskjellige sql-spørringer i en setning:

$q1 = "noen spørring på et sett med tabeller";
$q2 = "lignende spørring på et annet sett med tabeller";

if (($r1 = mysql_query ($q1 )) && ($r2 = mysql_query ($q2))) (

Mens (($row = mysql_fetch_assoc ($r1 ))||($row = mysql_fetch_assoc ($r2))) (

/* gjør noe med $row som kommer fra $r1 og $r2 */

}
}

?>

14 år siden

Hastighetstesten er interessant. Men den tilsynelatende raskeste måten inneholder en fallgruve for nybegynnere som bare bruker den fordi den er rask og rask er kul ;)

Å gå gjennom en matrise med next() vil kutte den første oppføringen, siden dette er måten next() fungerer ;)

Hvis du virkelig trenger å gjøre det på denne måten, sørg for at matrisen inneholder en tom oppføring i begynnelsen. En annen måte ville være å bruke

mens ($this = gjeldende ($array ))(
gjøre_noe($dette);
neste($array);
}
?>

Det er innvirkning på hastighet for sikkert, men jeg testet det ikke. Jeg vil anbefale å holde seg til konvensjonelle metoder fordi gjeldende(),neste() i while-løkker er for feilutsatt for meg.

I dette kapittelet:

For å begynne å bruke looper, må du vite hva de er, hva de kan gjøre og hvorfor de trengs i skript. En løkke er en kodeblokk som lar deg gjenta bestemte handlinger (instruksjoner) et visst antall ganger. Hver enkelt utførelse (en eller flere repetisjoner) av en sekvens av instruksjoner i en løkke kalles - iterasjon .

Hver syklus består av to hoveddeler. Den første bestemmer når løkkekjøringen skal stoppes. Den andre er det faktiske fragmentet av programkode som utfører nødvendige handlinger, som kan bestå av et enkelt utsagn eller flere utsagn omsluttet av krøllete klammeparenteser.

Løkkekoden utføres til det betingede løkkeuttrykket returnerer TRUE. For å unngå en uendelig løkke som vil snurre for alltid, må koden i løkkelegemet føre til at det betingede uttrykket returnerer FALSE på et tidspunkt. Når dette skjer, vil løkken slutte å kjøre, og utførelse vil fortsette fra kodelinjen umiddelbart etter løkken.

Mens loop operatør

While-løkken er den enkleste typen loop i PHP. Syntaksen er:

Nedenfor er et eksempel på en while-løkke hvis kropp blir utført 10 ganger:

\n"; $num++; ) ?>

Før loopen starter settes verdien til $num-variabelen til 1 (verdien kan være hvilken som helst). Dette kalles initialisering av en tellervariabel. Hver gang hoveddelen av loopen utføres, økes verdien av $num-variabelen med én ved å bruke $num++-økningen. Uttrykksverdi ($num<= 10) проверяется каждый раз перед итерацией цикла. После десяти итераций условное выражение вернет значение FALSE (так как значение переменной $num уже будет не меньше или равно 10) и работа цикла прекратится. В том случае, если условное выражение while будет равно FALSE с самого начала, тело цикла ни разу не будут выполнено.

De fleste looper har tellervariabler som ligner på $num. Oftest fungerer variablene kalt i, j og k som looptellere, men for å gjøre programkoden mer forståelig bør du gi tellerne mer beskrivende navn.

gjør mens loop-operatør

Do while-løkken er veldig lik mens loop, med den forskjellen at det betingede uttrykket er sjekket på slutten av iterasjonen, og ikke i begynnelsen. Syntaksen for denne løkken er:

Det er to forskjeller mellom en do while loop og en vanlig while loop. For det første krever do-løkken begge deler nøkkelord do (for å markere begynnelsen av løkken) og nøkkelordet while (for å markere slutten på løkken og angi betingelsen). For det andre, i motsetning til en while-løkke, ender en do-løkke med et semikolon. Denne typen loop er nyttig når hoveddelen av loopen må utføres minst én gang, uavhengig av verdien betinget uttrykk.

La oss prøve å utføre de samme handlingene som i forrige eksempel:

\n"; $num++; ) mens ($num<= 10); ?>

For loop-operatøren

Syntaksen til for loop-setningen er som følger:

Denne løkken består av nøkkelordet for, etterfulgt av parenteser som inneholder tre uttrykk inni, atskilt med semikolon. Den har følgende utførelsesordre:

  1. I begynnelsen av løkken utføres initialiseringsuttrykket; det blir alltid evaluert (utført) bare en gang helt i begynnelsen.
  2. Det følgende er et betinget uttrykk. Før starten av hver iterasjon beregnes verdien av det betingede uttrykket (utførelsesbetingelsen); hvis den tar verdien TRUE, utføres løkkens kropp, hvis den tar verdien FALSE, fullføres løkken. Hvis betingelsen er usann på den første testen, vil ikke selve løkken bli utført en gang.
  3. Helt på slutten, etter å ha utført handlingene i løkkens kropp, behandles det siste uttrykket (det neste uttrykket etter betingelsen). I dette tilfellet er dette et økende uttrykk - det øker verdien til tellervariabelen.

Et enkelt eksempel på en for-løkke:

Faktisk er for-løkken nesten universell fordi den tillater en lang rekke bruksområder.

for løkke uten toppdeler

Hvert av uttrykkene i for loop-overskriften kan mangle.

Hvis initialisering ikke er nødvendig eller skjer andre steder, er det ikke nødvendig med et initialiseringsuttrykk. La oss omskrive det forrige eksemplet litt:

Vær oppmerksom på at semikolon er obligatorisk fordi det angir et manglende uttrykk. Fraværet av et betingelsesuttrykk tilsvarer å plassere verdien TRUE i betingelsen.

I dette tilfellet vil løkken kjøre uendelig. Hvis det ikke er noe økende uttrykk, må det være i selve løkken, ellers vil løkken kjøres i det uendelige.

Husk at noen eller alle av de tre uttrykkene kan utelates, men semikolon (;) bør alltid brukes.

Flere uttrykk i hodet på en for-løkke

I for loop-overskriften kan hvert uttrykk atskilt med semikolon inneholde flere uttrykk atskilt med komma. Derfor kan uttrykk av enhver kompleksitet brukes.

"; } ?>

Hvis utførelsesbetingelsen bruker flere uttrykk atskilt med kommaer, blir alle evaluert, men resultatet er hentet fra det siste.

Nestede løkker

I tillegg til betingede uttalelser, løkker kan nestes. Et enkelt eksempel med ett hekkenivå:

"; for ($j = 0; $j< 2; $j++) { echo "Вложенный цикл.
"; } } ?>

Det er en annen loop-operator i PHP - foreach, men vi vil utsette beskrivelsen til senere, siden den er designet for å jobbe med matriser og objekter.

Hvis en omvendt skråstrek "\" oppstår i en streng omgitt av enkle anførselstegn (annet enn "\" eller ""), behandles det som et normalt tegn og skrives ut som alle andre. Derfor blir det en omvendt skråstrek. kreves escape bare hvis det er på slutten av linjen, før det avsluttende tilbudet.

Det finnes en rekke tegnkombinasjoner i PHP som begynner med omvendt skråstrek. Disse kalles rømningssekvenser og det har de spesielle betydninger, som vi skal snakke om litt senere. Så, i motsetning til de to andre syntaksene, variabler og kontrollsekvenser for spesielle karakterer, som forekommer i strenger omsluttet av enkle anførselstegn, behandles ikke.

ekko "Du kan også sette inn i linjer
nylinjekarakter altså,
fordi det er normalt"
;
// Utgang: For å sende ut " trenger du
// sett \ foran den
ekko "For å vise \" må du før ".
"sett henne \\";
// Utganger: Vil du slette C:\*.*?
ekko "Vil du slette C:\\*.*?";
// Utdata: Dette vil ikke sette inn: \n
// ny linje
ekko "Dette vil ikke sette inn:\nny linje";
// Utganger: $expand variabler også
// $ enten er ikke erstattet
ekko "$expand-variabler er også $either".
"ikke erstattet";
?>

16.1. Eksempel. Bruke escape-sekvenser

17. Doble anførselstegn

Hvis strengen er omsluttet av doble anførselstegn "", gjenkjenner PHP stor kvantitet escape-sekvenser for spesialtegn.

Noen av dem er vist i tabellen.
Bord. Kontrollsekvenser.

Vi gjentar, hvis du ønsker å unnslippe et annet tegn, vil skråstreken også skrives ut!

Den viktigste egenskapen til strenger i doble anførselstegn er behandling av variabler.

Heredoc

En annen måte å definere strenger på er å bruke heredoc-syntaks. I dette tilfellet må linjen begynne med tegnet<<<, после которого идет идентификатор. Заканчивается строка этим же идентификатором. Закрывающий идентификатор должен начинаться в первом столбце строки. Кроме того, идентификатор должен соответствовать тем же правилам именования, что и все остальные метки в PHP: содержать только буквенно-цифровые символы и знак подчеркивания и начинаться не с цифры или знака подчеркивания.

Heredoc-tekst oppfører seg på samme måte som en streng i doble anførselstegn, uten å ha dem. Dette betyr at du ikke trenger å unnslippe anførselstegn i heredoc, men du kan fortsatt bruke escape-sekvensene som er oppført ovenfor.

Variabler inne i heredoc blir også behandlet.

$str =<<Eksempel på en streng som spenner over flere
linjer ved hjelp av
heredoc syntaks
EOD;
// Her er identifikatoren EOD. Under
// EOT identifikator
$name = "Vasya" ;
ekko<<Mitt navn er "$name".
EOT;
// dette vil skrive ut "Mitt navn er "Vasya"."
?>

Eksempel. Bruker heredoc-syntaks
Merk: Heredoc-støtte ble lagt til i PHP 4.

18. Skriv array

En matrise i PHP er et ordnet kart - en type som konverterer verdier til nøkler. Denne typen er optimalisert på flere måter, slik at du kan bruke den som en faktisk matrise, en liste (vektor), en hash-tabell (som er en kartimplementering), en stabel, en kø, etc. Siden du kan ha en annen PHP-matrise som verdi, kan du
det er også enkelt å etterligne trær.

Du kan definere en matrise ved å bruke array()-konstruksjonen eller ved å direkte tilordne verdier til elementene. Definisjon ved hjelp av
array() array ( => verdi,
=> verdi1, ...)

Array()-språkkonstruksjonen tar nøkkel => verdipar som parametere, atskilt med komma. =>-symbolet samsvarer med en verdi med nøkkelen. Nøkkelen kan enten være et heltall eller en streng, og verdien kan være alt tilgjengelig i PHP-type. Den numeriske nøkkelen til en matrise kalles ofte indeksen. Array-indeksering i PHP starter fra null.

Verdien til et matriseelement kan fås ved å spesifisere nøkkelen til elementet som søkes etter matrisenavnet i hakeparenteser. Hvis matrisenøkkelen er en standard heltallsnotasjon, behandles den som et tall, ellers behandles den som en streng.

Derfor tilsvarer å skrive $a["1"] å skrive $a, akkurat som $a["-1"] tilsvarer $a[-1].

$books = array("php" =>
"PHP brukerveiledning" ,
12 => sant );
echo $books [ "php" ];
//vil vise "PHP brukerveiledning"
echo $books [12 ]; // vil gi ut 1
?>

18.1. Eksempel. Arrays i PHP

Hvis en nøkkel ikke er spesifisert for et element, blir den maksimale numeriske nøkkelen økt med én tatt som nøkkel. Hvis du spesifiserer en nøkkel som allerede er tildelt en verdi, vil den bli overskrevet. Siden PHP 4.3.0, hvis den maksimale nøkkelen er et negativt tall, Det neste nøkkel matrisen vil være null (0).

// arrays $arr og $arr1 er likeverdige
$arr = array(5 => 43 , 32 , 56 , "b" => 12 );
$arr1 = array(5 => 43 , 6 => 32 ,
7 => 56 , "b" => 12 );
?>

18.2. Eksempel. Arrays i PHP

Hvis du bruker TRUE eller FALSE som nøkkel, blir verdien konvertert til henholdsvis én og null av typen heltall. Hvis vi bruker NULL, vil vi i stedet for nøkkelen få en tom streng. Du kan også bruke selve den tomme strengen som en nøkkel, men den må være omgitt av anførselstegn. Så det er ikke det samme som å bruke tomme firkantede parenteser. Matriser og objekter kan ikke brukes som nøkler.

Definisjon ved hjelp av firkantet parentes syntaks

Du kan lage en matrise ved å skrive verdier inn i den. Som vi allerede har sagt, kan verdien av et matriseelement fås ved hjelp av firkantede parenteser, der du må angi nøkkelen, for eksempel $book["php"]. Hvis du spesifiserer en ny nøkkel og en ny verdi, for eksempel $book["new_key"]="new_value", vil et nytt element bli lagt til matrisen. Hvis vi ikke spesifiserer nøkkelen, men bare tildeler verdien $book="new_value", vil det nye array-elementet ha en numerisk nøkkel som er én større enn den maksimale eksisterende. Hvis matrisen vi legger verdier til ikke allerede eksisterer, vil den bli opprettet.

$books [ "nøkkel" ]= verdi ; // lagt til matrisen
// $books verdi
// verdi med nøkkel
$books = verdi1 ; /* lagt til matrisen
verdi verdi1 s
tast 13, fordi
maksimal nøkkel y
vi var 12 */
?>

For å endre spesifikt element array, trenger du bare å tilordne en ny verdi til den med nøkkelen. Du kan ikke endre et elements nøkkel, du kan bare slette et element (nøkkel/verdi-par) og legge til et nytt. For å fjerne et array-element må du bruke unset()-funksjonen.

$books = array("php" =>
"PHP brukerveiledning" ,
12 => sant );
$bøker =
"Bok om Perl" ; // lagt til element
// med nøkkel (indeks)
// 13 tilsvarer
// $books =
// "Bok om Perl";
$books["lisp"] =
123456 ; /* Dette legger til en ny til matrisen

Notatet: Den adaptive versjonen av nettstedet er aktivert, som automatisk tilpasser seg den lille størrelsen på nettleseren din og skjuler noen detaljer om nettstedet for enkel lesing. Nyt å se!

Hei kjære lesere og faste abonnenter! Det er på tide å fortsette artikkelserien om PHP og i dag skal vi studere en så grunnleggende og samtidig veldig viktig ting som loops. Hva er det første du trenger å vite om sykluser? Og det faktum at de brukes overalt, og maler for Joomla, VirtueMart, Wordpress, OpenCart og alle andre CMS er intet unntak.

Hva er en syklus? Syklus er den gjentatte repetisjonen av den samme kodebiten. Hvor mange repetisjoner som må gjøres avhenger av syklustelleren, som vi selv lager og kan kontrollere. Dette er veldig praktisk, for eksempel når vi skal vise produkter i en nettbutikkkategori, vise blogginnlegg, vise kommentarer til en artikkel eller et produkt; alle menyene i CMS (nettsidemotorer) er også laget ved hjelp av sykluser. Generelt brukes løkker veldig ofte.

Men før du går videre til selve løkkene, må du først forstå noe slikt som operatører øke Og nedgang.

Operatoren ++ (inkrement) øker verdien av en variabel med én, mens -- (reduser)-operatoren reduserer verdien av en variabel med én. De er veldig praktiske å bruke i løkker som teller, og i programmering generelt. Det er også PRE økning/reduksjon og POST økning/reduksjon:

PRE økning/redusering ++$a Øker $a med én og returnerer verdien av $a. --$a Reduserer $a med én og returnerer verdien av $a. POST økning/reduksjon $a++ Returnerer verdien av $a og øker deretter $a med én. $a-- Returnerer verdien av $a og reduserer deretter $a med én.

For eksempel:

$a = 1; ekko "Utgangsnummer: " . $a++; // Skriv ut nummeret: 1 ekko "Skriv ut nummeret: " . $a; // Skriv ut nummeret: 2 echo "Skriv ut nummeret: $a"; $a += 1; // samme som i første linje$a = 1; ekko "Utgangsnummer: " . +$a; // Skriv ut nummeret: 2 ekko "Skriv ut nummeret: " . $a; // Skriv ut tallet: 2 $a += 1; echo "Utgangsnummer: $a"; // det samme som i den første linjen i denne blokken

for løkke

for (del A; del B; del C)( // Enhver kode, så mange linjer du vil; )

For-løkken består av 3 deler og selve kroppen. Del A den gjør bare det den sier, vanligvis i 90 % av tilfellene skaper den en loopteller. Del B– Dette er, grovt sett, allerede kjent for oss hvis, det vil si å sjekke sannheten (sann?). Hvis betingelsen er sann, altså ekte, så går PHP inn i loopen og fortsetter å kjøre den. Del C- det samme som del A, som regel gjør vi i del C en form for transformasjon med telleren. For eksempel:

"; ) ekko "AVSLUTTE LOOPEN og gikk videre gjennom koden..."; ?>

Nå om algoritmen til for-løkken. Det første PHP ser etter er at det går til del A og kjører det bare én gang (se bildet nedenfor). Deretter går PHP til del B og sjekker om det er sant eller usant. Hvis det er sant, kjører den kroppen til løkken og flytter først etter det til del C. Etter dette går PHP igjen til del B og sjekker om det fortsatt er sant der eller ikke. Hvis ikke, slutter løkken, hvis ja, fortsetter den til del B inneholder usann.

Resultatet av forrige eksempel:

Mens Loop

while (del B)( // Enhver kode, så mange linjer du vil; )

Som du ser er det ingen del A og del C, fra for-løkken er det bare en betingelse igjen, det vil si del B. Skal vi bruke en teller, så må vi plassere den inne i while-løkken, bl.a. resten av koden vil dette være del C. A create Telleren er nødvendig før starten av while-konstruksjonen:

Del A; while (del B)( // Enhver kode, så mange linjer som ønsket; Del C; )

La oss konvertere forrige for-løkke til en while-løkke:

"; $i++; ) ekko "AVSLUTTE LOOPEN og gikk videre gjennom koden..."; ?>

Resultatet blir nøyaktig det samme. Hva du skal bruke: en for loop eller en while loop er et spørsmål om smak, se hva som er mer praktisk og logisk for deg, det er ingen forskjell.

Gjør... mens loop

Mindre vanlig av alle syklustyper. I hovedsak er dette en omvendt stund. Trikset er at PHP definitivt kommer inn i hoveddelen av do... while-løkken minst én gang (første gang), fordi i denne loopen er det en betingelse på slutten:

Del A; do( // Enhver kode, så mange linjer du vil; Del C; )while(Part B);

"; $i++; )while($i< 8); echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

Det er viktig å forstå: i alle tre typer sykluser er det ingen obligatoriske deler.

Et eksempel på en for-løkke uten del A og del C:

For(;$i > 8;)( // koden din)

Et eksempel på en for-løkke uten alle tre delene:

For(;;)( // klassisk endeløs loop)

Det vil si at alle semikolon fortsatt forblir i for-løkken, dette er syntaksen!

Uendelige løkker

En uendelig løkke er en utviklerfeil der siden aldri vil kunne lastes til slutten, siden løkkebetingelsen (del B) alltid vil være sann. For eksempel:

"; $i++; )while($i != 0); ekko "AVSLUTTE LOOPEN og gikk videre gjennom koden..."; ?>

Resultat:

Jeg viste bare en del av dette, fordi alt ikke får plass på skjermen. Dette er hvordan nettleseren din og serveren til nettstedet ditt vil lide uendelig til nettleseren krasjer etter 30 sekunder. Og alt fordi i eksemplet ovenfor vil $i-variabelen aldri være lik null, den er i utgangspunktet lik 1 og er konstant økende.

Det vil si at utvikleren var uoppmerksom da han kom med en slik tilstand.

Syklusstyring

Operatør pause. Det er situasjoner når vi ikke trenger loopen for å spille ut alle iterasjonene (repetisjonene). For eksempel hos noen bestemt øyeblikk vi ønsker å avbryte den og fortsette kjøringen med koden nedenfor:

"; if ($i === 5) break; // gå ut av loopen hvis $i er lik 5 $i++; ) ekko "Jeg kan bare telle opp til 5:("; ?>

Resultat:

I eksemplet ovenfor, så snart vi nådde fem, gikk PHP ut av loopen, ellers ville den ha telt til 7.

Fortsett operatør avbryter også utførelsen av sløyfen, men i motsetning til break, går fortsetter ikke ut av løkken, men returnerer PHP-tolkeren tilbake til tilstanden (til del B). Eksempel:

"; ) ekko "Gikk jeg glipp av noe?"; ?>

Resultat:

Vi gikk akkurat glipp av tallet 5 fordi PHP ikke fikk ekko.

En løkke kan nestes i en løkke. I dette tilfellet gjelder fortsett- og bryte-setningene bare for én sløyfe, den der de er plassert. Det vil si at de med andre ord overføres til ett nivå, og ikke på tvers av alle. Eksempel:

Men vi kan selv velge hvor mange nivåer vi trenger å hoppe gjennom:

"; $i++; $i=1; $k=1; mens ($k< 8) { echo "Итерация $k номер ". $k . "
"; if ($k === 5) break 2; $k++; ) ) ?>

Resultat:

Naturligvis kan vi ikke sette et tall som er større enn antallet nestede løkker vi har.

hver løkke

Sist i rekkefølge, men viktigst av betydning, er foreach-løkken. Brukt bare for opplisting og objekter (det er for tidlig å lære dem). Eksempel syntaks:

"; } ?>

Resultat:

Dette var en kort foreach-konstruksjon, men den har også en utvidet versjon, som i tillegg til verdiene til matrisecellene også viser navnene på cellene (nøklene):

$value) ( ​​ekko "I seksjon " . $nøkkel ." det er en artikkel som heter: ". $verdi ."
"; } ?>

Resultat:

Jeg gjør oppmerksom på at vi kan kalle variablene hva vi vil, til og med $nøkkel og $verdi, til og med $xxx og $yyy.

Hvis det er en matrise, bruker vi bare foreach-løkken og ingen andre. Det er denne syklusen som brukes i hele VirtueMart, og faktisk overalt.

Det er usannsynlig at du kan skrive et seriøst skript i PHP uten å bruke loops. Hva er en syklus? Dette er en spesiell type kontrollstruktur som lar deg utføre den samme koden gjentatte ganger (og til og med uendelig). Følgende løkker støttes i PHP:

De tre første løkkene er de du mest sannsynlig vil se i de fleste programmeringsspråk. Sløyfer, avhengig av forholdene, kan avbrytes eller fortsettes (fortsett til neste iterasjon uten å utføre sløyfekroppen). La oss se nærmere på hver av syklusene.

for løkke

Syntaksen til for-løkken er som følger.

For(initialisering; betingelse; kommandoer_etter_iterasjon) (loop_body; )

Initialiseringsblokken initialiserer alltid telleren, så vel som andre variabler (hvis nødvendig). Betingelsesblokken spesifiserer på hvilket tidspunkt løkken skal slutte å kjøre. I blokken med kommandoer som utføres etter hver iterasjon av løkken, endres vanligvis verdien av telleren, så vel som andre variabler (om nødvendig).

// Array of values ​​​​$array = array("Eple", "Potet", "Vannmelon", "Blomst", "Vann", "Kviksølv", "Oxygen", "Hvete", "Russland", "Moskva ", "Dusj"); // Løkkebetingelsen høres slik ut: inntil telleren når en verdi lik antallet // av array-elementer, utføres løkkens kropp for($i = 0; $i< count($array); $i++) { print "
".($i + 1)". ".$array[$i].."; ) /* Resultatet av syklusen blir som følger: 1. Eple 2. Potet 3. Vannmelon 4. Blomst 5. Vann 6. Kvikksølv 7 Oksygen 8. Hvete 9. Russland 10. Moskva 11. Regn */

Siden telleren $i startet fra null, la vi ved hver iterasjon en til verdien for å få listen til å se mer kjent ut. Etter hver iterasjon ble tellerverdien økt med én, og når den nådde 11, stoppet løkken. La oss nå ta en titt på do-while-løkken.

gjør-mens-løkke

Do-while-sløyfen er annerledes ved at den opererer på en postcondition. Dette betyr at koden i sløyfen vil bli utført minst én gang. Løkkesyntaksen er:

Gjør (loop_body; ) while(condition);

Denne sløyfen brukes ganske sjelden i webprogrammering, men du kan trenge den i skriptene dine.

// Allerede kjent for oss array $array = array("Eple", "Potet", "Vannmelon", "Blomst", "Vann", "Mercury", "Oxygen", "Wheat", "Russia", "Moskva " , "Regn"); // Start loopen $i = 1; gjør(skriv ut"
".$i.". ".$array[($i - 1)]."; ) while($i++< count($array)); /* Результат работы цикла будет таким: 1. Яблоко. 2. Картошка. 3. Арбуз. 4. Цветок. 5. Вода. 6. Ртуть. 7. Кислород. 8. Пшеница. 9. Россия. 10. Москва. 11. Ливень. */

Legg merke til forskjellen mellom det vi skriver ut i denne sløyfen og for-løkken. Siden koden er i kroppen gjør-mens-løkke utført minst én gang, ble startverdien til telleren satt til null. Hvordan en sløyfe fungerer... kode utføres, så testes en betingelse. Ved første iterasjon hadde telleren en verdi på 1. Etter iterasjon viste en seg å være mindre enn 11 (antall elementer). Ved siste iterasjon hadde telleren en verdi på 11, og denne er på ingen måte mindre enn 11. Sløyfen stoppet. While-løkken er veldig lik do-while.

mens loop

While-løkken er forutsatt. Den vil bare bli utført når tilstanden er sann. Det vil si at while-løkken kanskje ikke blir utført i det hele tatt. Syntaksen er:

While(tilstand) (loop_body; )

Sammen med for-løkken brukes while-løkken veldig ofte.

$array = array("Eple", "Potet", "Vannmelon", "Blomst", "Vann", "Kviksølv", "Oxygen", "Hvete", "Russland", "Moskva", "Regn"); $i = 1; while($i++<= count($array)) { print "
".$i.". ".$array[($i - 1)]."."; ) /* Resultatet av løkken blir som følger: 1. Eple 2. Potet 3. Vannmelon 4. Blomst 5. Vann. 6. Kvikksølv 7. Oksygen 8. Hvete 9. Russland 10. Moskva 11. Regn */

While-løkken er den enkleste og mest forståelige for nybegynnere.

hver løkke

Foreach-løkken er ikke som alle de ovennevnte. Den dukket opp i PHP4 og er designet for å iterere over arrays. Utvikleren trenger ikke finne på noe for dette. Alt er enkelt og greit:

/** * Foreach-løkken skal forstås som "for hver av". * Matrisen som behandles av løkken sendes til en variabel som * bare er tilgjengelig inne i løkken. Om ønskelig kan du også få tilgang til * matrisenøkler. */ foreach(array som array_element) (loop_body; ) foreach(array as array_key => array_element) (loop_body; )

Prinsippet for foreach-løkken er helt forskjellig fra for , while og do-while-løkkene. Derfor er det ganske vanskelig for uerfarne utviklere å forstå hva som kan (og til og med bør) gjøres med det.

// La oss endre matrisen vi allerede kjenner. La oss gjøre det assosiativt. $array = array("Apple" => "frukt", "Potet" => "grønnsak", "Vannmelon" => "bær", "Blomst" => "plante", "Vann" => "væske", "Mercury" => "metall", "Oxygen" => "gass", "Hvete" => "brød", "Russland" => "vårt moderland", "Moskva" => "hovedstaden i vårt moderland", "Regn " => "popados"); $i = 1; // Vi kan gjøre dette foreach($array som $v) ( print "
".$i.". ".$v."."; $i++; ) /* Vi får dette uventede resultatet: 1. frukt. 2. grønnsak. 3. bær. 4. plante. 5. væske. 6. metall. 7. gass. 8 . brød. 9. vårt moderland. 10. hovedstaden i vårt moderland. 11. popados. */ // La oss nå gjøre det annerledes foreach($array as $k => $v) ( print "
".$i.". ".$k." er ".$v."; $i++; ) /* Nå blir resultatet slik 1. Et eple er en frukt. 2. En potet er en grønnsak. 3. En vannmelon er et bær. 4. En blomst er en plante 5. Vann er en væske 6. Kvikksølv er et metall 7. Oksygen er en gass 8. Hvete er brød 9. Russland er vårt moderland 10. Moskva er hovedstaden i vårt moderland 11. Regn er en hit. .*/

Forstår du hvordan denne syklusen fungerer? Hvis ikke, kan du stille et spørsmål i kommentarfeltet til materialet.

Du kan bruke konstruksjoner i hvilken som helst løkke gå i stykker eller Fortsette. Noen ganger er det ikke fornuftig å fortsette loopen, eller du må gå videre til neste iterasjon.

$array = array("Apple" => "frukt", "Potet" => "grønnsak", "Vannmelon" => "bær", "Blomst" => "plante", "Vann" => "væske", "Mercury" => "metall", "Oxygen" => "gass", "Hvete" => "brød", "Russland" => "vårt moderland", "Moskva" => "hovedstaden i vårt moderland", "Regn " => "popados"); $i = 1; // Et eksempel på hvordan en sløyfe fungerer med konstruksjonen continue foreach($array as $k => $v) ( if($k != "Oxygen") continue; print "
".$i.". ".$k." er ".$v."; $i++; ) /* Resultatet blir slik 1. Oksygen er en gass. */ $i = 1; // Et eksempel på hvordan en sløyfe fungerer med konstruksjonsbruddet foreach($ array som $k = > $v) ( if($k == "Oxygen") break; print "
".$i.". ".$k." er ".$v."; $i++; ) /* Resultatet blir 1. Et eple er en frukt 2. En potet er en grønnsak 3. En vannmelon er et bær 4. En blomst er en plante. 5. Vann er en væske. 6. Kvikksølv er et metall. */