Računalniki Windows internet

PHP foreach ukaz O zapletenosti foreach v PHP. Razpakiranje ugnezdenih nizov s seznamom ()

Za vsako ... Naslednja zanka VBA Excel, njegovo sintakso in opis posameznih komponent. Primeri uporabe zanke Za vsako ... Next.

Zanka Za vsako ... Next v VBA Excelu je zasnovana tako, da izvede blok stavkov v zvezi z vsakim elementom iz skupine elementov (obseg, matrika, zbirka). Ta čudovita zanka se uporablja, ko število elementov v skupini in njihovo indeksiranje nista znana, v nasprotnem primeru jo je bolje uporabiti.

Za vsako ... Sintaksa naslednje zanke

Za vsak element V skupini [stavki] [Izhod za] [stavki] Naslednji [element]

V oglati oklepaji podani so izbirni atributi zanke For Every ... Next.

Za vsako ... Komponente naslednje zanke

*Če je zanka Za vsako ... Next uporabljena v VBA Excelu za zanko skozi elemente zbirke (predmet zbirke) ali matrike, potem spremenljivka element mora biti deklarirana z vrsto podatkov Varianta sicer zanka ne bo delovala.

**Če svoje kode ne uporabite v zanki, se pomen uporabe zanke izgubi.

Za vsako ... Primeri naslednje zanke

Zanka za vrsto celic

Na aktivnem listu Excelovega delovnega zvezka izberite obseg celic in zaženite naslednji postopek:

Subtest1 () Dim element As Range, a As String a = "Podatki, pridobljeni iz For Every ... Next:" Za vsak element v izboru a = a & vbNewLine & "Cell" & element.Address & _ " vsebuje vrednost: "& CStr (element.Value) Naslednji MsgBox a End Sub

Informacijsko okno MsgBox bo prikazalo naslove izbranih celic in njihovo vsebino, če obstaja. Če je izbranih veliko celic, potem popolne informacije o vseh celicah ne bodo prikazane, saj je največja dolžina parametra Poziv je približno 1024 znakov.

Zanka za zbiranje listov

Kopirajte ta postopek VBA v Excelove delovne zvezke:

Subtest2 () Dim element Kot delovni list, a As String a = "Seznam delovnih listov, ki jih vsebuje ta knjiga:" Za vsak element v delovnih listih a = a & vbNewLine & element.Index _ & ")" & element.Name Naslednji MsgBox a Končni sub

Informacijsko okno MsgBox bo prikazalo seznam imen vseh listov Excelovega delovnega zvezka po redni številki njihovih zavihkov, ki ustrezajo njihovim indeksom.

Zanka za matriko

Dodelite seznam imen živali matriki in v zanko Za vsako ... Naslednja zanka jih zapišite v spremenljivko a... Informacijsko okno MsgBox bo prikazalo seznam imen živali iz spremenljivke a.

Subtest3 () Dim element As Variant, a As String, group As Variant group = Array ("hippopotamus", "elephant", "kenguroo", "tiger", "mouse") " list, na primer izbrani: skupina = Izbira a = "Matrika vsebuje naslednje vrednosti:" & vbNewLine Za vsak element v skupini a = a & vbNewLine & element Naslednji MsgBox a End Sub

Ponovimo isti postopek VBA, vendar nastavimo vse elemente matrike v zanko For Every ... Next na Parrot. Informacijsko okno MsgBox bo prikazalo seznam imen živali, sestavljen samo iz papig, kar dokazuje možnost urejanja vrednosti elementov matrike v zanki Za vsako ... Next.

Subtest4 () Dim element As Variant, a As String, group As Variant group = Array ("hippopotamus", "elephant", "kenguroo", "tiger", "mouse") " list, na primer, izbrani: group = Izbor a = "Matrika vsebuje naslednje vrednosti:" & vbNewLine Za vsak element V skupini element = "Parrot" a = a & vbNewLine & element Naslednji MsgBox a Končni pod

Ta koda je bila, tako kot vse ostalo v tem članku, preizkušena v Excelu 2016.

Zanka za zbiranje podimenikov in izhod iz zanke

V tem primeru bomo dodali spremenljivko a imena podimenikov na disku C vaš računalnik. Ko cikel doseže mapo Programske datoteke , bo dodal spremenljivki a njeno ime in sporočilo: »Dovolj, ne bom več brala! Lep pozdrav, vaša Za vsako ... Naslednja zanka."

Subtest5 () Dim FSO kot objekt, myFolders kot objekt, moja mapa kot objekt, kot niz "Ustvarite nov FileSystemObject in ga dodelite spremenljivki" FSO "Nastavite FSO = CreateObject (" Scripting.FileSystemObject ")" Izvlecite seznam podimenikov na disku "C "in ga dodelite spremenljivki "myFolders" Nastavite myFolders = FSO.GetFolder ("C: \") a = "Mape na C:" & vbNewLine "Preglejte seznam podimenikov in dodajte njihove imena spremenljivke" a "", ko dosežete mapo "Program Files", zapustite zanko Za vsako myFolder In myFolders.SubFolders a = a & vbNewLine & myFolder.Name Če myFolder.Name = "Program Files" Potem a = a & vbNewLine & vbNewLine & "Dovolj, berite naprej, ne bom! "_ & vbNewLine & vbNewLine &" Lep pozdrav, "& vbNewLine & _" Vaš Za vsako ... naslednjo zanko. "Izhod za konec, če je naslednji nastavljen FSO = nič MsgBox a End Sub

Informacijsko okno MsgBox bo prikazalo seznam imen podimenikov na disku C računalnik v mapo Programske datoteke vključujoče in sporočilo cikla o prenehanju njegovega dela.

Posledično bo program prikazal ne samo imena podimenikov, ki so vidna pri navigaciji na disk v raziskovalcu C ampak tudi skrito in servisne mape... Za ogled seznama vseh podimenikov na disku C, komentirajte del kode iz Če prej Konec Če inkluzivno in zaženite postopek v urejevalniku VBA Excel.

Naredite zanki while in foreach

Zanka do. ... ... medtem

Naredite zanko while v C # je to postpogojna različica while. To pomeni, da se pogoj zanke preveri po izvedbi telesa zanke. Zato so zanke do ... while uporabne v primerih, ko je treba blok stavkov izvesti vsaj enkrat. Naslednja je splošna oblika stavka do-while zanke:

do (izjave;) while (pogoj);

Če obstaja samo ena izjava, so kodrasti oklepaji v tem zapisu neobvezni. Vendar se pogosto uporabljajo, da naredijo konstrukcijo do-while bolj berljivo in da jih ne zamenjamo s konstrukcijo zanke while. Zanka do-while teče, dokler je pogojni izraz resničen. Primer uporabe zanke do-while je naslednji program, ki izračuna faktorial števila:

Uporaba sistema; z uporabo System.Collections.Generic; z uporabo System.Linq; z uporabo System.Text; imenski prostor ConsoleApplication1 (razred Program (statična praznina Main (string args)) (poskusite (// Izračunajte faktorial za int i, rezultat = 1, num = 1; Console.WriteLine ("Vnesite številko:"); i = int.Parse (Console .ReadLine ()); Console.Write ("\ n \ nFactorial (0) =", i); do (rezultat * = num; num ++;) while (num

Zanka Foreach

Zanka Foreach služi za ciklični dostop do elementov zbirke, ki je skupina objektov. C # definira več vrst zbirk, od katerih je vsaka matrika. Naslednja je splošna oblika stavka foreach zanke:

operator foreach (v zbirki vnesite ime_spremenljivke zanke);

tukaj vnesite ime_spremenljivke ciklusa označuje vrsto in ime spremenljivke krmiljenja zanke, ki dobi vrednost naslednjega elementa v zbirki na vsakem koraku zanke foreach. Zbirka označuje ciklično anketirano zbirko, ki je v nadaljevanju matrika. Zato se mora vrsta spremenljivke zanke ujemati z vrsto elementa matrike. Poleg tega je mogoče označiti vrsto ključno besedo var. V tem primeru prevajalnik določi tip spremenljivke zanke na podlagi tipa elementa matrike. To je lahko koristno za obravnavo določenih vrst poizvedb. Toda tip je praviloma izrecno določen.

Stavek zanke foreach deluje na naslednji način. Ko se zanka začne, je prvi element matrike izbran in dodeljen spremenljivki zanke. Pri vsakem naslednjem koraku iteracije se izbere naslednji element matrike in shrani v spremenljivko zanke. Zanka se konča, ko so izbrani vsi elementi matrike.

Zanka foreach vam omogoča zanko skozi vsak element v zbirki (predmet, ki predstavlja seznam drugih predmetov). Formalno, da se nekaj šteje za zbirko, mora podpirati vmesnik IEnumerable. Primeri zbirk vključujejo matrike C #, razrede zbirk iz imenskega prostora System.Collection in razrede zbirk po meri.

(PHP 4, PHP 5, PHP 7)

Oblikovanje za vsakogar zagotavlja enostaven način iteracije po nizih. Za vsakogar deluje samo z nizi in predmeti in bo ustvaril napako, ko ga bo poskušal uporabiti s spremenljivkami drugih vrst ali neinicializiranimi spremenljivkami. Obstajata dve vrsti sintakse:

stavek foreach (izraz matrike kot vrednost $) stavek foreach (izraz matrike kot $ ključ => vrednost $)

Prva zanka se ponovi po matriki, podani z izraz_matrike... Pri vsaki ponovitvi se vrednost trenutnega elementa dodeli spremenljivki vrednost v $ notranji kazalec matrike pa se poveča za eno (tako bo pri naslednji ponovitvi zanke prišlo do dela z naslednjim elementom).

Druga zanka bo dodatno povezala ključ trenutnega elementa s spremenljivko $ ključ pri vsaki ponovitvi.

Komentar:

Ko operater za vsakogar začne izvajanje, se notranji kazalec matrike samodejno nastavi na prvi element To pomeni, da ni treba klicati funkcije ponastaviti () pred uporabo zanke za vsakogar.

Od operaterja za vsakogar se zanaša na notranji kazalec matrike, spreminjanje le-tega znotraj zanke lahko povzroči nepredvidljivo vedenje.

Za neposredno spreminjanje elementov matrike znotraj zanke je spremenljivka vrednost v $ mora biti pred &. V tem primeru bo vrednost dodeljena s referenco.

$ arr = matrika (1, 2, 3, 4);
foreach ($ arr kot & $ vrednost) (
$ vrednost = $ vrednost * 2;
}
// $ arr je zdaj matrika (2, 4, 6, 8)
nenastavljen (vrednost $); // prekini povezavo do zadnjega elementa
?>

Kazalec na vrednost v $ mogoče le, če je mogoče sklicevati na niz, ki ga ponavljamo (tj. če je spremenljivka). Naslednja koda ne bo delovala:

foreach (matrika (1, 2, 3, 4) kot vrednost & $) (
$ vrednost = $ vrednost * 2;
}
?>

Pozor

Povezava vrednost v $ zadnji element matrike ostane tudi za operatorjem za vsakogar končano delo. Priporočljivo je, da ga uničite s funkcijo izklopi ().

Komentar:

Operater za vsakogar ne podpira možnosti zatiranja sporočil o napakah s predpono "@".

Morda ste opazili, da so naslednji konstrukciji funkcionalno enaki:


ponastavi ($ arr);
medtem ko (seznam (, $ vrednost) = vsak ($ ​​arr)) (
echo "Vrednost: vrednost $
\ n ";
}

foreach ($ arr kot vrednost $) (
echo "Vrednost: vrednost $
\ n ";
}
?>

Naslednji konstrukciji so tudi funkcionalno enaki:

$ arr = matrika ("ena", "dva", "tri");
ponastavi ($ arr);
medtem ko (seznam ($ ključ, $ vrednost) = vsak ($ ​​arr)) (

\ n ";
}

foreach ($ arr kot $ ključ => vrednost $) (
echo "Ključ: $ ključ; Vrednost: $ vrednost
\ n ";
}
?>

Tukaj je še nekaj primerov, ki prikazujejo uporabo operaterja:

/ * Primer 1: samo vrednost * /

$ a = niz (1, 2, 3, 17);

foreach ($ a kot $ v) (
odmev "Trenutna vrednost \ $ spremenljivke:$ v. \ n ";
}

/ * Primer 2: vrednost (za ponazoritev se matrika izpiše kot vrednost s ključem) * /

$ a = niz (1, 2, 3, 17);

$ i = 0; / * samo za pojasnilo * /

Foreach ($ a kot $ v) (
echo "\ $ a [$ i] => $ v. \ n";
$ i ++;
}

/ * Primer 3: ključ in vrednost * /

$ a = matrika (
"ena" => 1,
"dva" => 2,
"tri" => 3,
"sedemnajst" => 17
);

foreach ($ a kot $ k => $ v) (
echo "\ $ a [$ k] => $ v. \ n";
}

/ * Primer 4: večdimenzionalni nizi * /
$ a = matrika ();
$ a [0] [0] = "a";
$ a [0] [1] = "b";
$ a [1] [0] = "y";
$ a [1] [1] = "z";

foreach ($ a kot $ v1) (
foreach ($ v1 kot $ v2) (
odmev "$ v2 \ n";
}
}

/ * Primer 5: dinamični nizi * /

Foreach (matrika (1, 2, 3, 4, 5) kot $ v) (
odmev "$ v \ n";
}
?>

Razpakiranje ugnezdenih nizov s seznamom ()

(PHP 5> = 5.5.0, PHP 7)

PHP 5.5 je dodal možnost prehoda niza nizov z razpakiranjem ugnezdenega niza v spremenljivke zanke s posredovanjem seznam () kot vrednost.

Konstrukt foreach je okus for, ki je vključen v jezik, da se olajša iteracija po elementih matrike. Obstajata dve vrsti ukaza foreach, ki ciljata na različne vrste nizov:

foreach (matrika kot element $) (

foreach (matrika kot $ ključ => $ element) (

Na primer, ko izvajate naslednji delček:

$ menu = аrrау ("testenine", "zrezek", "krompir", "ribe", "ocvrt");

foreach ($ meni kot $ element) (

natisnite "$ element
";

prikazan bo naslednji izhod:

V tem primeru je treba opozoriti na dve stvari. Prvič, konstrukt foreach se samodejno vrne na začetek matrike (to se ne zgodi pri drugih konstrukcijah zanke). Drugič, ni treba izrecno povečati števca ali kako drugače premakniti na naslednji element v matriki – to se zgodi samodejno z vsako ponovitvijo foreach.

Druga možnost se uporablja pri delu z asociativnimi nizi:

$ wine_inventory = niz (

"merlot" => 15,

"zinfandel" => 17,

"sauvignon" => 32

foreach ($ wine_inventory kot $ i => $ item_count) (

print "$ item_count steklenic od $ i preostalih
";

V tem primeru je rezultat videti takole:

Preostalo je še 15 steklenic merlota

Preostalo je 17 steklenic zinfandela

Ostalo je še 32 steklenic sauvignona

Kot lahko vidite iz zgornjih primerov, konstrukcija foreach zelo olajša delo z nizi.

Načelo delovanja konstrukcije stikala je nekoliko podobno if — rezultat, pridobljen z vrednotenjem izraza, se preveri glede na seznam možnih ujemanj.

To je še posebej uporabno pri preverjanju več vrednosti, saj uporaba stikala naredi program bolj opisen in kompakten. Splošni format za ukaz preklopa je:

stikalo (izraz) (

primer (pogoj):

primer (pogoj):

Pogoj, ki ga je treba preveriti, je naveden v oklepajih za ključno besedo switch. Rezultat njegovega izračuna se zaporedno primerja s pogoji v odsekih primerov. Če se najde ujemanje, se izvede blok ustreznega odseka. Če ni ujemanja, se izvede neobvezni privzeti blok razdelka.

Kot boste videli v naslednjih poglavjih, je ena od prednosti PHP ravnanje z vnosom uporabnikov. Recimo, da program prikaže spustni seznam z več možnostmi in vsaka vrstica seznama ustreza nekemu ukazu, ki se izvede v ločeni konstrukciji case. Izvedbo je zelo priročno zgraditi z ukazom switch:

$ user_input = "recepti"; // Ukaz, ki ga je izbral uporabnik

stikalo ($ user_input):

primer ("iskanje"):

print "Naredimo iskanje!";

primer ("slovar"):

print "Katero besedo bi radi poiskali?";

primer ("recepti"):

print "Tukaj je seznam receptov ...";

print "Tukaj je meni ...";

Kot lahko vidite iz zgornjega odrezka, ukaz switch zagotavlja jasno in intuitivno organizacijo kode. Spremenljivka, določena v klavzuli preklopa (v tem primeru $ user_input), se primerja s pogoji vseh naslednjih odsekov primerov. Če se vrednost, podana v razdelku primer, ujema z vrednostjo spremenljivke, ki se primerja, se izvede blok tega razdelka. Stavek break preprečuje preverjanje nadaljnjih odsekov case in konča izvajanje stavka switch. Če nobeden od preverjenih pogojev ni izpolnjen, se prikliče izbirni privzeti razdelek. Če ni privzetega odseka in ni izpolnjen noben od pogojev, se ukaz za preklop preprosto konča in izvajanje programa se nadaljuje z naslednjim ukazom.

Ne pozabite, da če v razdelku case ni stavka break (glejte naslednji razdelek), se izvedba stikala nadaljuje z naslednjim stavkom, dokler ne naletite na stavek break ali pa se doseže konec stavka switch. Naslednji primer prikazuje posledice manjkajočega pozabljenega ukaza za prekinitev: $ value = 0,4;

stikalo (vrednost v $):

vrednost print "je 0,4
";

print "vrednost je 0,6
";

print "vrednost je 0,3
";

print "Niste izbrali vrednosti!";

Rezultat izgleda takole:

Odsotnost ukaza za prekinitev je povzročila, da se v razdelku, kjer je bilo najdeno ujemanje, ne izvede samo ukaz za tiskanje, temveč tudi ukaz za tiskanje v naslednjem razdelku. Nato je izvajanje stavkov switch prekinil stavek switch, ki je sledil drugemu stavku za tiskanje.

Izbira med ukazoma switch in if praktično ne vpliva na delovanje programa. Odločitev o uporabi te ali one konstrukcije je precej osebna stvar programerja.

Stavek break takoj prekine izvajanje stavka while, for ali switch, v katerem se nahaja. Ta ukaz je bil že omenjen v prejšnjem razdelku, vendar prekinitev trenutne zanke ne izčrpa zmožnosti ukaza za prekinitev. Na splošno je sintaksa preloma videti tako:

Neobvezni parameter n določa število ravni nadzornih struktur, ki se končajo z ukazom break. Na primer, če je ukaz za prekinitev ugneznjen v dveh izjavah while in je številka 2 po prekinitvi, se obe zanki takoj zapustita. Privzeta vrednost za n je 1; prehod na eno raven je lahko označen z izrecno navedbo 1 ali z navedbo ukaza za prekinitev brez parametra. Upoštevajte, da ukaz i f ni ena od krmilnih konstrukcij, ki jih prekine ukaz break.

Pogosto morate pregledati vse elemente matrike PHP in izvesti neko operacijo na vsakem elementu. Vsako vrednost lahko na primer izpišete v tabelo HTML ali pa vsakemu elementu dodelite novo vrednost.

V tej lekciji si bomo ogledali konstrukt foreach pri zankanju skozi indeksirane in povezane matrike.

Prek vrednosti elementov

Najpreprostejši primer uporabe foreach je, če zankate vrednosti v indeksirani matriki. Osnovna sintaksa:

Foreach (matrika $ kot vrednost $) (// Naredi nekaj z vrednostjo $) // Tukaj se koda izvede po koncu zanke

Naslednji skript se na primer vrti po seznamu direktorjev v indeksirani matriki in natisne ime vsakega od njih:

$ režiserji = niz ("Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang"); foreach ($ direktorji kot $ direktor) (odmev $ direktor. "
"; }

Zgornja koda bo izpisala:

Alfred Hitchcock Stanley Kubrick Martin Scorsese Fritz Lang

Prekrivajte ključe in vrednosti

Kaj pa povezani nizi? Pri uporabi teh vrst nizov je pogosto treba imeti dostop do ključa vsakega elementa in njegove vrednosti. Konstrukt foreach ima način za izpolnitev te naloge:

Foreach (matrika $ kot $ ključ => vrednost $) (// Naredi nekaj s ključem $ in / ali vrednostjo $) // Tu se koda izvede po koncu zanke

Primer organiziranja zanke skozi povezano matriko z informacijami o filmih, prikaže ključ vsakega elementa in njegovo vrednost na seznamu definicij HTML:

$ movie = array ("title" => "Zadnje okno", "direktor" => "Alfred Hitchcock", "leto" => 1954, "minute" => 112); odmev "

"; foreach ($ film kot $ ključ => vrednost $) (odmev"
$ ključ:
"; odmev"
vrednost v $
";) odmev"
";

Ta skript bo ob izvedbi izpisal:

Naslov: Rear Window Režija: Alfred Hitchcock letnik: 1954 minut: 112

Spreminjanje vrednosti elementa

Kaj pa sprememba vrednosti elementa med zanko? Lahko poskusite s kodo, kot je ta:

Foreach ($ myArray kot vrednost $) (vrednost $ = 123;)

Vendar, če ga zaženete za izvedbo, boste ugotovili, da so vrednosti v matriki ne spreminjaj... Razlog je v tem, da foreach deluje z kopija vrednosti matrike, ne z izvirnikom. Tako ostane prvotni niz nedotaknjen.

Če želite spremeniti vrednosti matrike, potrebujete povezava na vrednost. Če želite to narediti, morate pred spremenljivko vrednosti v konstrukciji foreach postaviti znak &:

Foreach ($ myArray kot & vrednost $) (vrednost $ = 123;)

Naslednji skript se na primer vrti skozi vsak element (ime direktorja) v nizu $ directors in uporablja funkcijo PHP explode () in konstrukcijo seznama za zamenjavo imen in priimkov:

$ režiserji = niz ("Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang"); // Spremeni obliko imena za vsak element foreach ($ direktorji kot & $ direktor) (seznam ($ firstName, $ lastName) = eksplodiraj ("", $ direktor); $ direktor = "$ priimek, $ firstName";) nenastavljen ( $ direktor); // Natisnite končni rezultat foreach ($ direktorji kot $ direktor) (echo $ direktor. "
"; }

Skript bo izpisal:

Hitchcock, Alfred Kubrick, Stanley Scorsese, Martin Lang, Fritz

Upoštevajte, da skript pokliče funkcijo unset () za odstranitev spremenljivke $ director po končani prvi zanki. To je dobra praksa, če nameravate spremenljivko uporabiti pozneje v skriptu v drugem kontekstu.

Če povezave ne izbrišete, obstaja tveganje pri nadaljnjem izvajanju kode naključne reference na zadnji element v nizu ("Lang, Fritz"), če še naprej uporabljate spremenljivko $ director, ki bo povzročilo nepredvidene posledice!

Povzetek

V tej vadnici smo si ogledali, kako uporabiti konstrukcijo PHP foreach za zanko skozi elemente matrike. Obravnavana so bila naslednja vprašanja:

  • Kako zankati skozi elemente matrike
  • Kako dostopati do ključa in vrednosti vsakega predmeta
  • Kako uporabiti referenco za spreminjanje vrednosti med hojo skozi zanko