Menu
Jest wolny
rejestracja
Dom  /  Oprogramowanie układowe/ Pętla PHP foreach: dwa sposoby jej użycia. Wykonaj pętle while i foreach Php tablice foreach

Pętla PHP foreach: dwa sposoby jej użycia. Wykonaj pętle while i foreach Php tablice foreach

Często trzeba przejść przez wszystkie elementy tablicy PHP i wykonać jakąś operację na każdym elemencie. Na przykład możesz wyprowadzić każdą wartość do tabeli HTML lub przypisać nową wartość do każdego elementu.

V ta lekcja przyjrzymy się konstrukcji foreach podczas przechodzenia przez tablice indeksowane i powiązane.

Zapętl wartości elementów

Najprostszym przypadkiem użycia foreach jest zapętlenie wartości w tablicy indeksowanej. Podstawowa składnia:

Foreach (tablica $ jako wartość $) (// Zrób coś z wartością $) // Tutaj kod jest wykonywany po zakończeniu pętli

Na przykład poniższy skrypt przegląda w pętli listę dyrektorów w indeksowanej tablicy i wyświetla nazwę każdego z nich:

$ directors = array („Alfred Hitchcock”, „Stanley Kubrick”, „Martin Scorsese”, „Fritz Lang”); foreach ($ reżyserzy jako $ reżyser) (echo $ reżyser. "
"; }

Powyższy kod zwróci:

Alfred Hitchcock Stanley Kubrick Martin Scorsese Fritz Lang

Zapętlaj klucze i wartości

A co z powiązanymi tablicami? Przy korzystaniu z tego typu tablic często konieczne jest posiadanie dostępu do klucza każdego elementu oraz jego wartości. Konstrukcja foreach ma sposób na wykonanie tego zadania:

Foreach (tablica $ jako klucz $ => wartość $) (// Zrób coś z kluczem $ i / lub wartością $) // Tutaj kod jest wykonywany po zakończeniu pętli

Przykład organizacji pętli przez powiązaną tablicę z informacjami o filmach, wyświetla klucz każdego elementu i jego wartość na liście definicji HTML:

$ movie = array ("title" => "Tylne okno", "director" => "Alfred Hitchcock", "rok" => 1954, "minuty" => 112); Echo "

"; foreach ($ film jako $ klucz => $ wartość) (echo"
Klucz $:
"; Echo"
$ wartość
";) Echo"
";

Ten skrypt wyświetli po wykonaniu:

Tytuł: Reżyser okna tylnego: Alfred Hitchcock rok: 1954 min: 112

Zmiana wartości elementu

Ale co ze zmianą wartości elementu podczas pętli? Możesz wypróbować kod w ten sposób:

Foreach ($ myArray jako wartość w $) (wartość w $ = 123;)

Jeśli jednak uruchomisz go w celu wykonania, okaże się, że wartości w tablicy nie zmieniaj... Powodem jest to, że foreach współpracuje z kopia wartości tablicy, a nie z oryginałem. Pozostawia to oryginalną tablicę nienaruszoną.

Aby zmienić wartości tablicy, potrzebujesz połączyć na wartość. Aby to zrobić, musisz umieścić znak & przed zmienna wartość w konstrukcji foreach:

Foreach ($ myArray jako & $ value) ($ value = 123;)

Na przykład poniższy skrypt przechodzi przez każdy element (nazwę dyrektora) w tablicy $ directors i używa Funkcja PHP explode() i konstrukcja listy do zamiany imion i nazwisk:

$ directors = array („Alfred Hitchcock”, „Stanley Kubrick”, „Martin Scorsese”, „Fritz Lang”); // Zmień format nazwy dla każdego elementu foreach ($ directors as & $ director) (list ($ firstName, $ lastName) = explode ("", $ director); $ director = "$ lastName, $ firstName";) unset ( dyrektor $); // Wydrukuj wynik końcowy foreach ($ directors jako $ director) (echo $ director. "
"; }

Skrypt wygeneruje:

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

Zauważ, że skrypt wywołuje funkcję unset() w celu usunięcia zmiennej $director po zakończeniu pierwszej pętli. Jest to dobra praktyka, jeśli planujesz później użyć zmiennej w skrypcie w innym kontekście.

Jeśli nie usuniesz linku, to istnieje ryzyko w dalszym wykonywaniu kodu losowego odwołania się do ostatniego elementu w tablicy ("Lang, Fritz"), jeśli nadal będziesz używać zmiennej $director, która doprowadzi do nieprzewidzianych konsekwencji!

Streszczenie

W tym samouczku przyjrzeliśmy się, jak używać konstrukcja PHP foreach, aby przejść przez elementy tablicy. Rozpatrzono następujące kwestie:

  • Jak przejść przez elementy tablicy
  • Jak uzyskać dostęp do klucza i wartości każdego przedmiotu?
  • Jak wykorzystać referencję do zmiany wartości podczas przechodzenia przez pętlę?

Wyobraź sobie, że masz tablicę asocjacyjną, którą chcesz iterować. PHP zapewnia łatwy sposób na użycie każdego elementu tablicy po kolei za pomocą konstrukcji Foreach.

W prostym języku brzmiałoby to mniej więcej tak:
„Dla każdego elementu w określonej tablicy wykonaj ten kod”.

Chociaż będzie to kontynuowane, dopóki nie zostanie spełniony pewien warunek, pętla foreach będzie kontynuowana, dopóki nie przejdzie przez każdy element tablicy.

PHP Foreach: Przykład

Posiadamy tablicę asocjacyjną, która przechowuje nazwiska osób w naszej firmie, a także ich wiek. Chcemy wiedzieć, ile lat ma każdy pracownik, dlatego używamy pętli do każdego elementu, aby wydrukować imię i wiek każdego pracownika.

$pracownikWiek; $ workerAges ["Lisa"] = "28"; $ workerAges ["Jack"] = "16"; $ workerAges ["Ryan"] = "35"; $ workerAges ["Rachel"] = "46"; $ workerAges ["Grace"] = "34"; foreach ($ workerAges jako $ klucz => $ wartość) (echo "Nazwa: $ klucz, Wiek: $ wartość
"; }

Otrzymujemy wynik:

Imię: Lisa, Wiek: 28 Imię: Jack, Wiek: 16 Imię: Ryan, Wiek: 35 Imię: Rachel, Wiek: 46 Imię: Grace, Wiek: 34

Cóż, wynik jest dobry i zrozumiały, ale składnia konstrukcji foreach nie jest łatwa i zrozumiała. Przyjrzyjmy się temu bliżej.

Dla każdej składni: $ coś jako $ klucz => $ wartość

Całe to szaleństwo z grubsza przekłada się na: „Dla każdego elementu tablicy asocjacyjnej $ workerAges chcę odnieść się do klucza $ i zawartej w nim wartości, czyli wartości $.

Operator „=>” reprezentuje relację między kluczem a wartością. W naszym przykładzie nazwaliśmy je jako klucz - klucz $ i wartość - wartość $. Jednak łatwiej byłoby myśleć o nich jako o imieniu i wieku. W naszym przykładzie poniżej zrobimy to i zauważymy, że wynik będzie taki sam, ponieważ zmieniliśmy tylko nazwy zmiennych, które odnoszą się do kluczy i wartości.

$pracownikWiek; $ workerAges ["Lisa"] = "28"; $ workerAges ["Jack"] = "16"; $ workerAges ["Ryan"] = "35"; $ workerAges ["Rachel"] = "46"; $ workerAges ["Grace"] = "34"; foreach ($ workerAges jako $ imię => $ wiek) (echo "Imię: $ imię, Wiek: $ wiek
"; }

Cóż, powtarzamy, że wynik jest taki sam.

Pętla PHP foreach może być używana w następujący sposób:

foreach ($ nazwa_tablicy jako wartość $) (// kod do wykonania)

foreach ($ array_name jako $ key => $ value) (// // kod do wykonania)

Przykład użycia pętli foreach z tablicą numeryczną

W tym przykładzie utworzymy pięcioelementową tablicę z wartościami liczbowymi. Pętla PHP foreach zostanie następnie użyta do iteracji po tej tablicy. Wewnątrz pętli foreach użyliśmy echa do wydrukowania wartości tablicy:

Zobacz demo i kod

Przykład z kluczami i wartościami tablicy

Ten przykład opisuje inny sposób użycia pętli PHP foreach. W tym celu stworzyliśmy tablicę asocjacyjną trzech elementów. Zawiera nazwiska pracowników ( jako klawisze) i kwotę wynagrodzenie (jako wartości):

Zobacz demo i kod

Przykład zmiany wartości elementu tablicy w pętli foreach

Możesz również c przy użyciu PHP array foreach możesz zmieniać wartości elementów tablicy. Aby to zrobić, użyj „&” przed „$” jako wartości zmiennej. Na przykład:

& $ value_of_element

Wartość zostanie zmieniona. Aby było to jaśniejsze, rozważmy następujący przykład.

W tym przykładzie stworzyliśmy tablicę numeryczną pięciu elementów. Następnie użyliśmy pętli foreach do wyświetlenia wartości elementów.

Następnie utworzyliśmy kolejną pętlę foreach, w której „&” jest dodawane przed $ value_of_element. Wewnątrz nawiasów klamrowych przypisujemy nowe wartości elementom tablicy.

Aby zobaczyć różnicę przed i po przypisaniu nowych wartości, tablica jest wyświetlana za pomocą funkcji print_r().

Zobacz demo i kod

Do czego służy pętla foreach PHP?

Pętla PHP foreach służy do pracy z tablicą. Iteruje nad każdym ze swoich elementów.

Możesz także użyć pętli for do pracy z tablicami. Na przykład użycie właściwości length do pobrania długości tablicy, a następnie zastosowania jej jako operatora max. Ale foreach to ułatwia, ponieważ został zaprojektowany do pracy z tablicami.

Jeśli pracujesz z MySQL, ten cykl jest do tego jeszcze bardziej odpowiedni. Na przykład możesz wybrać wiele wierszy z tabeli bazy danych i przekazać je do tablicy. Następnie, używając pętli foreach, przeprowadź iterację po wszystkich elementach tablicy i wykonaj jakąś akcję.

Zauważ, że możesz użyć pętli foreach z tablicą lub po prostu z obiektem.

Korzystanie z pętli foreach

Istnieją dwa sposoby użycia pętli foreach PHP w PHP. Oba zostały opisane poniżej.

  • Składnia pierwszej metody użycia to:

foreach ($ array_name jako $ value) (echo $ value)

W takim przypadku należy podać nazwę tablicy, a następnie wartość zmiennej $.

Dla każdej iteracji wartość bieżącego elementu jest przypisywana do zmiennej wartości $. Po zakończeniu iteracji zmiennej przypisywana jest wartość kolejnego elementu. I tak dalej, aż wszystkie elementy tablicy zostaną wyliczone.

  • Składnia drugiej metody ( PHP foreach jako kluczowa wartość):

Jest to odpowiednie dla tablic asocjacyjnych, które używają par klucz/wartość.

Podczas każdej iteracji wartość bieżącego elementu zostanie przypisana do zmiennej $ value_of_element. Dodatkowo klucz elementu jest przypisany do zmiennej $ key_of_element.

Jeśli pracujesz z tablicami numerycznymi, możesz użyć pierwszej metody, która nie wymaga kluczy elementów.

Niniejsza publikacja jest tłumaczeniem artykułu „ Pętla PHP foreach 2 sposoby jej użycia„Przygotowane przez przyjazny zespół projektowy

Konstrukcja foreach jest odmianą for zawartego w języku, aby ułatwić iterację elementów tablicy. Istnieją dwa rodzaje polecenia foreach dla różne rodzaje tablice:

foreach (tablica jako element $) (

foreach (tablica jako klucz $ => element $) (

Na przykład podczas wykonywania następującego fragmentu kodu:

$ menu = аrrау („makaron”, „stek”, „ziemniaki”, „ryba”, „frytki”);

foreach (menu $ jako pozycja $) (

drukuj "$ przedmiot
";

wyświetlone zostaną następujące dane wyjściowe:

W tym przykładzie należy zwrócić uwagę na dwie rzeczy. Po pierwsze, konstrukcja foreach automatycznie powraca na początek tablicy (nie dzieje się tak w innych konstrukcjach pętli). Po drugie, nie ma potrzeby jawnego zwiększania licznika lub w inny sposób przechodzenia do następnego elementu w tablicy — dzieje się to automatycznie z każdą iteracją foreach.

Druga opcja jest używana podczas pracy z tablice asocjacyjne:

$ wine_inventory = tablica (

"merlot" => 15,

„zinfandel” => 17,

"sauvignon" => 32

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

print "$ item_count butelek z $ i pozostałych"
";

W tym przypadku wynik wygląda tak:

Pozostało 15 butelek merlota

Pozostało 17 butelek zinfandelu

Pozostały 32 butelki sauvignon

Jak widać z powyższych przykładów, konstrukcja foreach znacznie ułatwia pracę z tablicami.

Zasada działania konstrukcji przełącznika jest nieco podobna do if — wynik uzyskany z oceny wyrażenia jest porównywany z listą potencjalnych dopasowań.

Jest to szczególnie przydatne podczas sprawdzania wielu wartości, ponieważ użycie przełącznika sprawia, że ​​program jest bardziej opisowy i zwięzły. Ogólny format polecenia switch to:

przełącznik (wyrażenie) (

sprawa (stan):

sprawa (stan):

Sprawdzony stan jest wskazany w nawiasach po słowo kluczowe przełącznik. Wynik jego obliczeń jest sekwencyjnie porównywany z warunkami w sekcjach przypadku. Jeśli zostanie znalezione dopasowanie, wykonywany jest blok odpowiedniej sekcji. Jeśli nie zostanie znalezione żadne dopasowanie, wykonywany jest opcjonalny domyślny blok sekcji.

Jak zobaczysz w kolejnych rozdziałach, jedną z mocnych stron PHP jest obsługa danych wejściowych użytkownika. Załóżmy, że program wyświetla listę rozwijaną z kilkoma opcjami, a każdy wiersz listy odpowiada poleceniu wykonanemu w oddzielny projekt Obudowa. Bardzo wygodne jest budowanie implementacji za pomocą polecenia switch:

$ user_input = "przepisy"; // Polecenie wybrane przez użytkownika

przełącznik ($ user_input):

przypadek ("szukaj"):

print "Przeprowadźmy wyszukiwanie!";

przypadek ("słownik"):

print "Jakie słowo chciałbyś sprawdzić?";

przypadek („przepisy”):

print "Oto lista przepisów...";

print "Oto menu...";

Jak widać z powyższego fragmentu, polecenie switch zapewnia przejrzystą i intuicyjną organizację kodu. Zmienna określona w klauzuli switch (w tym przykładzie $ user_input) jest porównywana z warunkami wszystkich kolejnych sekcji case. Jeżeli wartość określona w sekcji case odpowiada wartości porównywanej zmiennej, wykonywany jest blok tej sekcji. Instrukcja break zapobiega sprawdzaniu dalszych sekcji case i kończy wykonywanie instrukcji switch. Jeśli żaden z zaznaczonych warunków nie jest spełniony, wywoływana jest opcjonalna sekcja domyślna. Jeśli nie ma sekcji domyślnej i żaden z warunków nie jest spełniony, polecenie switch po prostu kończy się, a wykonywanie programu jest kontynuowane z następnym poleceniem.

Należy pamiętać, że jeśli w sekcji case nie ma instrukcji break (patrz następna sekcja), wykonanie switch jest kontynuowane z następną instrukcją, aż do napotkania instrukcji break lub osiągnięcia końca instrukcji switch. Poniższy przykład ilustruje konsekwencje pominięcia zapomnianego polecenia przerwania: $ value = 0,4;

przełącznik (wartość $):

drukuj "wartość to 0,4
";

print "wartość to 0.6
";

drukuj "wartość wynosi 0,3
";

print "Nie wybrałeś" wartości! ";

Wynik wygląda tak:

Brak polecenia przerwania skutkował nie tylko wykonaniem polecenia drukowania w sekcji, w której znaleziono dopasowanie, ale także polecenia drukowania w następnej sekcji. Następnie wykonywanie instrukcji switch zostało przerwane przez instrukcję switch następującą po drugiej instrukcji print.

Wybór między poleceniami switch i if nie ma praktycznie żadnego wpływu na wydajność programu. Decyzja o zastosowaniu takiej lub innej konstrukcji jest raczej osobistą sprawą programisty.

Instrukcja break natychmiast przerywa wykonywanie instrukcji while, for lub switch, w których się znajduje. To polecenie zostało już wspomniane w poprzedniej sekcji, ale przerwanie pętli prądowej nie wyczerpuje możliwości polecenia przerwania. V ogólna perspektywa składnia break wygląda tak:

Opcjonalny parametr n określa liczbę poziomów struktur kontrolnych, które mają zostać zakończone przez polecenie break. Na przykład, jeśli polecenie break jest zagnieżdżone w dwóch instrukcjach while, a liczba 2 jest po break, obie pętle są natychmiast zamykane. Domyślna wartość n to 1; przejście do jednego poziomu może być sygnalizowane wyraźnym wskazaniem 1 lub wskazaniem polecenia przerwania bez parametru. Zauważ, że polecenie i f nie jest jedną z konstrukcji sterujących przerwanych przez polecenie przerwania.

For Each ... Next pętla w VBA Excel, jej składnia i opis poszczególnych komponentów. Przykłady użycia pętli For Each ... Next.

Pętla For Each ... Next w VBA Excel jest przeznaczona do wykonania bloku instrukcji w odniesieniu do każdego elementu z grupy elementów (zakres, tablica, kolekcja). Ta cudowna pętla jest używana, gdy liczba elementów w grupie i ich indeksowanie są nieznane, w przeciwnym razie lepiej jest z niej korzystać.

Dla każdego ... Składnia następnej pętli

Dla każdego elementu W grupie [wyciągi] [Wyjście dla] [wyciągi] Dalej [element]

Nawiasy kwadratowe wskazują opcjonalne atrybuty pętli For Each ... Next.

Dla każdego ... komponentów następnej pętli

*Gdyby Dla pętli Każdy ... Next jest używany w VBA Excel do przechodzenia elementów kolekcji (obiektu kolekcji) lub tablicy, a następnie zmiennej element musi być zadeklarowany z typem danych Wariant w przeciwnym razie pętla nie będzie działać.

**Jeśli nie użyjesz swojego kodu w pętli, sens użycia pętli zostanie utracony.

Dla każdego ... Przykłady następnej pętli

Pętla dla zakresu komórek

Na aktywnym arkuszu skoroszytu programu Excel zaznacz zakres komórek i uruchom następującą procedurę:

Sub test1 () Dim element As Range, a As String a = "Dane pobrane z For Each ... Next:" For Each element In Selection a = a & vbNewLine & "Cell" & element.Address & _ " zawiera wartość: "& CStr (element.Value) Next MsgBox a End Sub

W oknie informacyjnym MsgBox zostaną wyświetlone adresy wybranych komórek i ich ewentualna zawartość. Jeśli zaznaczono wiele komórek, pełne informacje o wszystkich komórkach nie będą wyświetlane, ponieważ maksymalna długość parametru Podpowiedź ma około 1024 znaków.

Pętla do zbierania arkuszy

Skopiuj następujące Procedura VBA do skoroszytów programu Excel:

Sub test2 () Dim element As Worksheet, a As String a = "Lista arkuszy roboczych zawartych w tej książce:" For Each element In Worksheets a = a & vbNewLine & element.Index _ & ")" & element.Name Next MsgBox a Napis końcowy

W oknie informacyjnym MsgBox zostanie wyświetlona lista nazw wszystkich arkuszy skoroszytu Excel według liczby porządkowej ich zakładek odpowiadających ich indeksom.

Pętla dla tablicy

Przypisz listę nazw zwierząt do tablicy i w pętli For Each ... Next zapisz je do zmiennej a... Okno informacyjne MsgBox wyświetli listę nazw zwierząt ze zmiennej a.

Sub test3 () Dim element As Variant, a As String, grupa As Variant group = Array ("hipopotam", "słoń", "kangur", "tygrys", "mysz") " arkusz, na przykład wybrany: grupa = Wybór a = "Tablica zawiera następujące wartości:" & vbNewLine For Each element In group a = a & vbNewLine & element Next MsgBox a End Sub

Powtórzmy tę samą procedurę VBA, ale ustawmy wszystkie elementy tablicy w pętli For Each ... Next na Parrot. W oknie informacyjnym MsgBox wyświetli się lista imion zwierząt, składająca się wyłącznie z papug, co świadczy o możliwości edycji wartości elementów tablicy w pętli For Each... Next.

Sub test4 () Dim element As Variant, a As String, grupa As Variant grupa = Array ("hipopotam", "słoń", "kangur", "tygrys", "mysz") " arkusz, na przykład wybrany: group = Wybór a = "Tablica zawiera następujące wartości:" & vbNewLine For Each element In group element = "Parrot" a = a & vbNewLine & element Next MsgBox a End Sub

Ten kod, podobnie jak wszystko inne w tym artykule, został przetestowany w programie Excel 2016.

Pętla do zbierania podkatalogów i wyjścia z pętli

W tym przykładzie dodamy do zmiennej a nazwy podkatalogów na dysku C Twój komputer. Kiedy cykl dotrze do folderu Pliki programów, doda do zmiennej a jego nazwa i przesłanie: „Dosyć, nie będę czytać dalej! Pozdrawiam, Twój For Each ... Następna pętla.”

Sub test5 () Dim FSO As Object, myFolders As Object, myFolder As Object, a As String "Utwórz nowy FileSystemObject i przypisz go do zmiennej" FSO "Ustaw FSO = CreateObject (" Scripting.FileSystemObject ")" Wyodrębnij listę podkatalogi na dysku "C" i przypisz" go do zmiennej "myFolders" Ustaw myFolders = FSO.GetFolder ("C: \") a = "Foldery na C:" & vbNewLine "Przejdź przez listę podkatalogów i dodaj ich nazwy zmiennej" a "" po dotarciu do folderu "Program Files" wyjdź z pętli For Each myFolder In myFolders.SubFolders a = a & vbNewLine & myFolder.Name If myFolder.Name = "Program Files" Then a = a & vbNewLine & vbNewLine & "Dość, czytaj dalej nie będę! "_ & vbNewLine & vbNewLine &" Pozdrawiam, "& vbNewLine & _" Your For Each ... Następna pętla. "Exit For End If Next Set FSO = Nic MsgBox Koniec Sub

Okno informacyjne MsgBox wyświetli listę nazw podkatalogów na dysku C twój komputer do folderu Pliki programów włącznie i przesłanie cyklu o zakończeniu jego pracy.

Dzięki temu program wyświetli nie tylko nazwy podkatalogów widoczne podczas nawigowania na dysk w eksploratorze C, ale także foldery ukryte i usługowe. Aby wyświetlić listę wszystkich podkatalogów na dysku C, zakomentuj fragment kodu z Gdyby przed Zakończ, jeśli włącznie i uruchom procedurę w edytorze VBA Excel.