|
PHP 4 zawiera, czego brak w PHP 3, konstrukcję foreach, podobną do jej odpowiedników z Perla i innych języków. Pętla ta umożliwia łatwą iterację wewnątrz tablic. foreach działa tylko na tablicach i każda próba użycia tej pętli na innym typie lub na niezainicjowanej zmiennej będzie skwitowana komunikatem o błędzie. Istnieją dwie składnie tej konstrukcji, przy czym druga jest mniej ważnym, lecz użytecznym rozszerzeniem pierwszej:
foreach(wyrażenie_tablicowe as $wartość) wyrażenie foreach(wyrażenie_tablicowe as $klucz => $wartość) wyrażenie |
Pierwsza odmiana iteruje wewnątrz tablicy podanej w wyrażenie_tablicowe. Przy każdej iteracji, wartość aktualnego elementu tablicy jest przypisywana do zmiennej $wartość, a wewnętrzny wskaźnik tablicy jest przesuwany o jeden (więc w następnej iteracji przypisany zostanie kolejny element tablicy).
Druga odmiana działa tak samo jak pierwsza, przy czym klucz aktualnego elementu tablicy zostanie przypisany do zmiennej $klucz w każdej iteracji.
Notatka: Kiedy rozpoczyna się wykonywanie pętli foreach, wewnętrzny wskaźnik tablicy jest automatycznie resetowany, co ustawia go na pierwszym elemencie tablicy. Oznacza to, że nie trzeba wywoływać komendy reset() przed rozpoczęciem pętli foreach.
Notatka: Proszę także pamiętać, że konstrukcja foreach operuje na kopii tablicy, a nie na oryginale, więc położenie kursora tablicy nie jest modyfikowane jak w konstrukcji each(), a zmiany dokonane na pobranym elemencie tablicy nie oddziałują na oryginalną tablicę. Jednakże wewnętrzny kursor oryginalnej tablicy jest przesuwany w trakcie trawersowania tablicy. Zakładając, że pętla foreach będzie działać aż do przetworzenia całej tablicy, kursor tablicy będzie się znajdował na końcu tablicy.
Notatka: foreach nie pozwala na ukrycie komunikatów o błędach za pomocą '@'.
Można zauważyć, że poniższe przykłady są funkcjonalnie identyczne:
$arr = array("jeden", "dwa", "trzy"); |
reset ($tabl); |
Więcej przykładów demonstrujących użycie tej pętli:
/* przykład 1 foreach: tylko wartość */ |
Hosting by: Hurra Communications Sp. z o.o.
Generated: 2007-01-26 18:02:24