PHP/Instrukcja for: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Zdzichobot (dyskusja | edycje) zamiana prognav->subst:naw |
m aktualizacja formatowania i drobne poprawki merytoryczne |
||
Linia 1:
{{prognaw|PHP|[[../Instrukcja switch/]]|[[../Instrukcja while/]]}}
Linia 15 ⟶ 13:
Oddzielone są one średnikami. Pokażemy to na przykładzie skryptu wyświetlającego liczby od 0 do 9.
{
▲ for($i = 0; $i < 10; $i++)
}
▲ echo $i.'<br/>';
</source>
Warunek startu tworzy nową zmienną
{{Uwaga|Uważaj na warunek końca pętli! Jeżeli niepoprawnie go zdefiniujesz, pętla może nie wykonać się wcale albo też powtarzać się w nieskończoność. Drugi przypadek nie jest aż taki groźny, ponieważ PHP automatycznie przerywa wykonywanie skryptu, jeżeli trwa ono ponad 30 sekund.}}
Linia 36 ⟶ 32:
Widzę i opisuję, bo tęsknię po tobie.
Zastosujemy funkcję
▲ $plik = file('plik.txt');
</source>
Do określenia ilości wierszy użyliśmy poznanej już wcześniej funkcji
Zwróć uwagę na specyficzną budowę wyrażenia inicjacji pętli. Pragniemy utworzyć dwie zmienne, dlatego oddzielamy je przecinkami. Podobną sztuczkę możemy zastosować również w wyrażeniu iteracyjnym. Można się zapytać, dlaczego zastosowaliśmy tak rozbudowaną konstrukcję. Przecież dopuszczalne jest także napisanie:
</source>
W typowych sytuacjach obie konstrukcje zachowają się podobnie, lecz warto pamiętać o pewnym niuansie technicznym. Pierwsza z konstrukcji pobiera ilość elementów tablicy na samym początku. Jeżeli któryś cykl pętli doda jakiś element, nie zostanie on uwzględniony. W drugim przypadku ilość ta jest pobierana po każdym cyklu, zatem pętla dysponuje bieżącymi informacjami o wielkości tablicy i wszelka jej zmiana zostanie uwzględniona w ilości wykonanych cykli. Sposób ten jest jednak mniej wydajny od pierwszego.
Linia 73 ⟶ 68:
Naszym zadaniem jest wprowadzenie komend do tablicy, aby można je było łatwiej przetwarzać. Skrypt ten będziemy pisać kawałek po kawałku. Na początek stwórzmy sobie parę zmiennych:
▲ $tekst = 'Komenda; Komenda; Komenda; Komenda. To już pomijamy.';
</source>
Rozpoczynamy pętlę. Do pobrania długości ciągu użyjemy funkcji
{
</source>
Implementujemy możliwość pierwszą. Spacje ignorujemy, dlatego przy ich napotkaniu przerywamy aktualny cykl pętli komendą '''continue''' i przechodzimy do następnego:
</source>
Zauważ, jak odwołujemy się do określonego znaku wewnątrz ciągu:
Druga możliwość - po napotkaniu kropki przerwać pętlę wcześniej:
</source>
Przechodzimy do ewentualności trzeciej. Przy średniku należy przesunąć się na nowy element tablicy wynikowej i zainicjować go pustym ciągiem. Każdy inny znak wprowadzamy do aktualnego elementu tablicy:
</source>
Teraz dopełnienie formalności, tj. zamknięcie pętli i wyświetlenie zawartości tablicy funkcją
<source lang="php" line start="24">}
Zapytajmy się, jak przerwać pętlę, jeżeli jesteśmy aktualnie w instrukcji switch? Wywołanie '''break''' i '''continue''' będzie się przecież odnosiło do niej, a tego nie chcemy. Rozwiązaniem jest podanie po nich numeru określającego, której instrukcji wzwyż dotyczy wywołanie. Przepiszmy jeszcze raz powyższy kod z wykorzystaniem instrukcji wyboru (notabene nawet bardziej pasującej w tym przypadku):
$tablica = array(0 => '');
▲ $tekst = 'Komenda; Komenda; Komenda; Komenda. To już pomijamy.';
{
▲ $tablica = array(0 => '');
▲ $t = 0;
{
case ' ':
▲ for($i = 0; $i < strlen($tekst); $i++)
continue 2;
case '.':
▲ switch($tekst{$i})
▲ }
}
▲ break;
▲ $tablica[$t] .= $tekst{$i};
Przy stanach spacji oraz kropki wywołujemy komendy '''continue''' oraz '''break''' z parametrem 2, aby podkreślić, że dotyczą one pętli for, a nie instrukcji switch. '''break''' w kodzie obsługi średnika nie ma parametru, więc odnosi się do instrukcji switch.
|