Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
01155 011038 11044675 na godz. na dobę w sumie
PHP5. Wprowadzenie - książka
PHP5. Wprowadzenie - książka
Autor: Liczba stron: 352
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-0288-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Poznaj możliwości języka PHP5

Czas, kiedy statyczne witryny internetowe przyciągały rzesze odwiedzających, dawno już minął. Dziś trzeba znacznie więcej, aby zainteresować użytkowników internetu. Doskonale przygotowany projekt graficzny to tylko jeden z elementów. Najistotniejsza jest jednak zawartość witryny -- aktualne treści, formularze umożliwiające kontakt z twórcami oraz mechanizmy pozwalające na personalizację witryny i przechowywanie artykułów w bazie danych. Doskonałym narzędziem do tworzenia takich elementów jest PHP5 -- prosty język programowania o potężnych możliwościach i, co najważniejsze, dostępny nieodpłatnie.

Jeśli chcesz nauczyć się programowania w tym języku, sięgnij po książkę 'PHP5. Wprowadzenie'. Znajdziesz w niej wszystkie informacje niezbędne do tego, aby samodzielnie stworzyć dynamiczną witrynę WWW. Poznasz elementy języka PHP i nauczysz się stosować je, tworząc elementy strony WWW. Dowiesz się, jak łączyć witrynę WWW z bazą danych i w jaki sposób identyfikować jej użytkowników. Przeczytasz tu również o wykrywaniu i usuwaniu błędów ze skryptów oraz o tym, do czego możesz zastosować język PHP.

Tchnij życie w statyczne witryny internetowe -- wykorzystaj PHP5!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREŒCI SPIS TREŒCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOŒCIACH O NOWOŒCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl PHP5. Wprowadzenie Autor: David Sklar T³umaczenie: Robert Górczyñski ISBN: 83-246-0288-7 Tytu³ orygina³u: Learning PHP 5 Format: B5, stron: 352 Poznaj mo¿liwoœci jêzyka PHP5 (cid:129) Zbuduj komponenty dynamicznych witryn WWW (cid:129) Wykorzystaj funkcje z biblioteki PEAR (cid:129) Przetestuj kod i usuñ b³êdy Czas, kiedy statyczne witryny internetowe przyci¹ga³y rzesze odwiedzaj¹cych, dawno ju¿ min¹³. Dziœ trzeba znacznie wiêcej, aby zainteresowaæ u¿ytkowników internetu. Doskonale przygotowany projekt graficzny to tylko jeden z elementów. Najistotniejsza jest jednak zawartoœæ witryny — aktualne treœci, formularze umo¿liwiaj¹ce kontakt z twórcami oraz mechanizmy pozwalaj¹ce na personalizacjê witryny i przechowywanie artyku³ów w bazie danych. Doskona³ym narzêdziem do tworzenia takich elementów jest PHP5 — prosty jêzyk programowania o potê¿nych mo¿liwoœciach i, co najwa¿niejsze, dostêpny nieodp³atnie. Jeœli chcesz nauczyæ siê programowania w tym jêzyku, siêgnij po ksi¹¿kê „PHP5. Wprowadzenie”. Znajdziesz w niej wszystkie informacje niezbêdne do tego, aby samodzielnie stworzyæ dynamiczn¹ witrynê WWW. Poznasz elementy jêzyka PHP i nauczysz siê stosowaæ je, tworz¹c elementy strony WWW. Dowiesz siê, jak ³¹czyæ witrynê WWW z baz¹ danych i w jaki sposób identyfikowaæ jej u¿ytkowników. Przeczytasz tu równie¿ o wykrywaniu i usuwaniu b³êdów ze skryptów oraz o tym, do czego mo¿esz zastosowaæ jêzyk PHP. (cid:129) Operacje na tekstach i liczbach (cid:129) Sterowanie przebiegiem programu (cid:129) Tworzenie interaktywnych formularzy (cid:129) Korzystanie z baz danych (cid:129) Mechanizmy sesji i obs³uga plików cookie (cid:129) Przetwarzanie dat (cid:129) Operacje na plikach (cid:129) Generowanie i przetwarzanie dokumentów XML (cid:129) Testowanie kodu i usuwanie b³êdów Tchnij ¿ycie w statyczne witryny internetowe — wykorzystaj PHP5! Przedmowa...................................................................................................................... 9 1. Wprowadzenie i pierwsze kroki....................................................................................17 17 20 22 27 31 Miejsce PHP w świecie internetowym Co wyjątkowego jest w PHP? PHP w działaniu Podstawowe zasady programów PHP Podsumowanie rozdziału 2. Praca z tekstem i liczbami............................................................................................. 33 33 42 44 47 48 Tekst Liczby Zmienne Podsumowanie rozdziału Ćwiczenia 3. Podejmowanie decyzji oraz powtórki..........................................................................49 50 51 53 58 61 61 Zrozumieć wartości: prawda i fałsz Podejmowanie decyzji Tworzenie skomplikowanych decyzji Powtórki Podsumowanie rozdziału Ćwiczenia 4. Praca z tablicami............................................................................................................ 63 63 67 72 74 77 Podstawy tablic Wykonywanie pętli na tablicach Modyfikacja tablic Sortowanie tablic Używanie tablic wielowymiarowych 5 Podsumowanie rozdziału Ćwiczenia 80 81 5. Funkcje ...........................................................................................................................83 84 85 88 92 95 95 Deklarowanie i wywoływanie funkcji Przekazywanie argumentów do funkcji Zwracanie wartości z funkcji Zrozumienie zasięgu zmiennych Podsumowanie rozdziału Ćwiczenia 6. Tworzenie formularzy sieciowych ............................................................................... 97 100 103 105 115 117 123 123 Dostęp do parametrów formularza Przetwarzanie formularzy za pomocą funkcji Sprawdzanie poprawności danych Wyświetlanie wartości domyślnych Kompletny formularz Podsumowanie rozdziału Ćwiczenia 7. Przechowywanie informacji w bazach danych ......................................................... 125 126 128 130 131 136 137 138 141 145 147 150 153 157 158 Zorganizowanie danych w bazie danych Łączenie się z programem bazy danych Tworzenie tabeli Umieszczanie danych w bazie danych Bezpieczne wstawianie danych formularza Generowanie unikalnego identyfikatora Kompletny formularz wstawiania danych Otrzymywanie danych z bazy danych Zmiana formatu otrzymanych wierszy Bezpieczne otrzymywanie danych formularza Kompletny formularz otrzymywania danych MySQL bez PEAR DB Podsumowanie rozdziału Ćwiczenia 8. Zapamiętywanie użytkowników za pomocą cookies i sesji..................................... 159 160 164 165 167 169 Praca z cookies Aktywacja sesji Przechowywanie i otrzymywanie informacji Konfiguracja sesji Logowanie i identyfikacja użytkownika 6 | Spis treści Dlaczego funkcje setcookie() i session_start() należy umieszczać na samej górze strony Podsumowanie rozdziału Ćwiczenia 174 175 176 9. Obsługa daty i czasu ....................................................................................................177 177 182 183 192 195 195 Wyświetlanie daty lub czasu Analiza składniowa daty lub czasu Data i czas w formularzach Wyświetlanie kalendarza Podsumowanie rozdziału Ćwiczenia 10. Praca z plikami..............................................................................................................197 197 198 204 207 207 210 211 212 Uprawnienia plików Odczytywanie i zapisywanie całych plików Praca z plikami CSV Kontrolowanie uprawnień plików Szukanie błędów Oczyszczanie dostarczonych z zewnątrz nazw plików Podsumowanie rozdziału Ćwiczenia 11. Analiza składniowa i generowanie dokumentów XML............................................ 213 214 220 221 222 Analiza składniowa dokumentu XML Generowanie dokumentu XML Podsumowanie rozdziału Ćwiczenia 12. Debugowanie .............................................................................................................. 223 223 224 228 231 232 232 Kontrolowanie miejsc, w których pojawiają się błędy Poprawianie błędów składni Sprawdzanie danych programu Poprawianie błędów bazy danych Podsumowanie rozdziału Ćwiczenia 13. Co jeszcze można zrobić za pomocą PHP?................................................................. 235 235 236 237 238 Grafika PDF Shockwave/Flash Kod dla określonej przeglądarki Spis treści | 7 Wysyłanie i otrzymywanie wiadomości e-mail Wysyłanie plików w formularzach Struktura obsługująca formularze HTML_QuickForm Klasy i obiekty Zaawansowane przetwarzanie XML SQLite Uruchamianie poleceń powłoki Zaawansowane operacje matematyczne Szyfrowanie Komunikacja z innymi językami IMAP, POP3 i NNTP Wiersz poleceń PHP PHP-GTK Co jeszcze możesz zrobić za pomocą PHP? 239 240 241 244 246 249 249 250 251 252 252 254 254 255 A Instalacja i konfiguracja interpretera PHP ................................................................. 257 B Podstawy wyrażeń regularnych................................................................................. 279 C Odpowiedzi do ćwiczeń.............................................................................................. 295 Skorowidz .................................................................................................................... 331 8 | Spis treści ROZDZIAŁ 4. Tablice są zbiorami powiązanych wartości, na przykład danych wysłanych z formularza, na- zwisk studentów w grupie lub wielkości populacji na liście miast. W rozdziale 2. dowiedzia- łeś się, że zmienne są nazwanymi stałymi, które przechowują wartość. Tablica jest pojemni- kiem przechowującym wiele wartości różniących się między sobą. Dzięki temu rozdziałowi dowiesz się, w jaki sposób pracować z tablicami. Podrozdział „Pod- stawy tablic” zawiera podstawowe informacje na temat tworzenia tablic oraz manipulowania jej elementami. Niejednokrotnie będziesz musiał wykonywać pewne czynności w odniesieniu do każdego elementu w tablicy, np. wyświetlić element bądź zbadać, czy zachodzą określo- ne warunki. Podrozdział „Wykonywanie pętli na tablicach” wyjaśni kwestie używania pętli z tablicami za pomocą konstrukcji foreach() oraz for(). W podrozdziale „Modyfikacja ta- blic” wprowadzimy funkcje implode() oraz explode() zamieniające tablice w łańcuchy oraz łańcuchy na tablice. Innym rodzajem modyfikacji tablicy jest sortowanie, które zostanie prze- analizowane w podrozdziale „Sortowanie tablic”. Na końcu rozdziału, w podrozdziale „Uży- wanie tablic wielowymiarowych” zostanie poruszony temat tablic zawierających w sobie in- ne tablice. Rozdział 6. z kolei pozwoli Ci zrozumieć, w jaki sposób przetwarzać dane formularzy, które interpreter PHP automatycznie umieszcza w tablicy. Kiedy otrzymujesz informacje z bazy danych, jak to zostało opisane w rozdziale 7., dane zostają często umieszczone w tablicy. Podstawy tablic Tablica składa się z elementów, zaś każdy element posiada klucz oraz wartość. Tablica przecho- wująca informacje na temat kolorów warzyw posiada nazwę warzywa jako klucz oraz kolor jako wartość klucza, co zostało pokazane na rysunku 4.1. Tablica może posiadać tylko jeden element dla podanego klucza. W tablicy kolorów warzyw nie może być innego elementu z kluczem kukurydza, nawet jeśli jego wartością byłoby nie- bieski. Jednakże ta sama wartość może pojawiać się wielokrotnie w tej samej tablicy. Możesz więc posiadać pomarańczowe marchewki, pomarańczowe mandarynki oraz pomarańczowe pomarańcze. 63 Rysunek 4.1. Klucze i wartości tablicy Dowolny łańcuch lub wartość liczbowa może być elementem klucza tablicy, na przykład ku- kurydza, 4, -36 lub Solona kałamarnica. Tablice i inne wartości nieskalarne1 nie mogą być kluczami, ale mogą być elementami wartości. Element wartości może być łańcuchem, liczbą, wartością prawda lub fałsz, może być również inną tablicą. Tworzenie tablicy Aby utworzyć tablicę, przypisz wartości poszczególnym kluczom tablicy. Klucze tablicy są oznaczane za pomocą nawiasów kwadratowych, jak to zostało przedstawione na listingu 4.1. Listing 4.1. Tworzenie tablic // Tablica o nazwie $warzywa z kluczami łańcuchami. $warzywa[ kukurydza ] = żółty ; $warzywa[ burak ] = czerwony ; $warzywa[ marchewka ] = pomarańczowy ; // Tablica o nazwie $obiad z kluczami liczbowymi. $obiad[0] = Słodka kukurydza ze szparagami ; $obiad[1] = Kurczak cytrynowy ; $obiad[2] = Duszone grzyby z bambusem ; // Tablica o nazwie $komputery z kluczami liczbowymi oraz łańcuchami. $komputery[ trs-80 ] = Radio Shack ; $komputery[2600] = Atari ; $komputery[ Adam ] = Coleco ; Klucze i wartości tablicy przedstawionej na listingu 4.1 są łańcuchami (na przykład kukury- dza, Duszone grzyby bambusa czy Coleco) i liczbami (na przykład 0, 1 czy 2600). Zostały napisane podobnie jak inne łańcuchy i liczby w programach PHP: ze znakami cudzysłowów otaczającymi łańcuchy, ale nie liczby. Tablicę możesz również utworzyć za pomocą służącej temu konstrukcji języka array(). Przy- kład z listingu 4.2 przedstawia tę samą tablicę, która została już zaprezentowana w przykła- dzie z listingu 4.1. Listing 4.2. Tworzenie tablicy za pomocą konstrukcji array() $warzywa = array( kukurydza = żółty , burak = czerwony , marchewka = pomarańczowy ); 1 Wartości skalarne opisują dane, które posiadają pojedynczą wartość: liczbę, fragment tekstu, wartość prawda lub fałsz. Złożone typy danych, na przykład tablice przechowujące wiele wartości, nie są skalarne. 64 | Rozdział 4. Praca z tablicami $obiad = array(0 = Słodka kukurydza ze szparagami , 1 = Kurczak cytrynowy , 2 = Duszone grzyby z bambusem ); $komputery = array( trs-80 = Radio Shack , 2600 = Atari , Adam = Coleco ); Za pomocą konstrukcji array() określasz listę par klucz-wartość oddzieloną przecinkami. Natomiast klucz i wartość są rozdzielone przez = . Składnia array() jest zwięzła, dlatego jest bardziej odpowiednia, gdy w danym momencie dodajesz do tablicy więcej niż jeden element. Składnia nawiasów kwadratowych jest lepsza, kiedy dodajesz elementy pojedynczo. Wybór dobrej nazwy tablicy W stosunku do nazw tablic obowiązują te same reguły, które mają zastosowanie do nazw zmiennych. Pierwszym znakiem tablicy musi być litera bądź cyfra, a pozostałe znaki w na- zwie muszą być literami, cyframi lub znakami podkreślenia. Nazwy tablic i zmiennych ska- larnych pochodzą z tej samej puli nazw, tak więc nie możesz posiadać jednocześnie tablicy $warzywa oraz zmiennej skalarnej o nazwie $warzywa. Jeżeli przypiszesz wartość tablicy do zmiennej skalarnej lub na odwrót, wówczas stara wartość zostanie usunięta, a zmienna otrzy- ma nowy typ. W przykładzie na listingu 4.3 zmienna $warzywa staje się skalarna, a zmienna $owoce staje się tablicą. Listing 4.3. Tablice a kolizje skalarne // Poniższy wiersz przekształca zmienną $warzywa w tablicę. $warzywa[ kukurydza ] = żółty ; // Usunięcie wszelkich śladów po kukurydza i żółty powoduje, że // tablica $warzywa staje się skalarna. $warzywa = wyborne ; // Poniższy wiersz powoduje, że tablica $owoce staje się skalarna. $owoce = 283; // Zmienia zmienną $owoce w tablicę i usuwa poprzednią wartość skalarną. $owoce[ potas ] = banan ; Na listingu 4.1 tablice $warzywa oraz $komputery przechowywały listę powiązań. Tablica $warzywa wiązała warzywa z kolorami, podczas gdy tablica $komputery wiązała nazwy kom- puterów i producentów. Jednakże w tablicy $obiad zatroszczyliśmy się o nazwy posiłków, które były wartościami tablicy. Klucze tablicy są po prostu liczbami, które odróżniają jeden element od drugiego. Tworzenie tablic liczbowych PHP daje możliwość wykorzystania pewnych skrótów do pracy z tablicami, których klucze to wyłącznie liczby. Jeżeli utworzysz tablicę za pomocą konstrukcji array(), określając jedy- nie listę wartości zamiast par klucz-wartość, interpreter PHP automatycznie przypisze każdej wartości klucz liczbowy. Klucze rozpoczynają się od 0 i zwiększają o 1 w przypadku każde- go elementu. Kod przedstawiony na listingu 4.4 wykorzystuje tę technikę do utworzenia ta- blicy $obiad. Podstawy tablic | 65 Listing 4.4. Tworzenie tablic liczbowych za pomocą konstrukcji array() $obiad = array( Słodka kukurydza ze szparagami , Kurczak cytrynowy , Duszone grzyby z bambusem ); print Chciałbym $obiad[0] oraz $obiad[1]. ; Wykonanie kodu przedstawionego na listingu 4.4 spowoduje wyświetlenie: Chciałbym Słodka kukurydza ze szparagami oraz Kurczak cytrynowy. Wewnętrznie interpreter PHP traktuje jednakowo tablice z kluczami liczbowymi oraz tablice z kluczami łańcuchami (jak i również tablice z mieszanymi kluczami liczbowymi i łańcucha- mi). Z powodu podobieństwa do funkcji w innych językach programowania programiści czę- sto odwołują się do tablic z kluczami wyłącznie liczbowymi jako do tablic „liczbowych”, „indeksowanych” lub „uporządkowanych” oraz do tablic z łańcuchami jako do tablic „aso- cjacyjnych”. Innymi słowy, z tablicą asocjacyjną mamy do czynienia wtedy, gdy jej klucze są wyraźnie czymś innym niż pozycjami wartości wewnątrz tablicy. W trakcie tworzenia przez Ciebie tablicy PHP automatycznie zwiększa o jednostkę liczbę dla kluczy tablicy oraz dodaje do niej elementy z pustymi nawiasami kwadratowymi, co zostało przedstawione na listingu 4.5. Listing 4.5. Dodawanie elementów za pomocą składni [] // Utwórz tablicę $lunch zawierającą dwa elementy. // Powoduje to ustawienie $lunch[0] $lunch[] = Suszone grzyby w przyrumienionym sosie ; // Powoduje to ustawienie $lunch[1] $lunch[] = Ananas i grzyb ; // Tworzy tablicę $obiad zawierającą trzy elementy. $obiad = array( Słodka kukurydza ze szparagami , Kurczak cytrynowy , Duszone grzyby z bambusem ); // Dodaj element na końcu tablicy $obiad. // Powoduje to ustawienie $obiad[3] $obiad[] = Skrzydełko na ostro ; Puste nawiasy kwadratowe dodają element do tablicy. Element posiada klucz liczbowy, któ- ry ma wartość o jeden większą niż dotychczasowy największy klucz obecny w tablicy. Jeżeli tablica jeszcze nie istnieje, puste nawiasy kwadratowe dodadzą element z kluczem 0. Tworzenie pierwszego elementu posiadającego klucz 0, a nie 1 odbiega od sposobu myślenia zwykłego człowieka (różni się od logiki przyjętej przez programistów kom- puterowych), tak więc wymaga przypomnienia. Pierwszym elementem tablicy z klu- czem liczbowym jest 0, a nie 1. Poznawanie rozmiaru tablicy Funkcja count() informuje o liczbie elementów w tablicy. Przykład przedstawiony na listin- gu 4.6 prezentuje użycie funkcji count(). Listing 4.6. Poznawanie rozmiaru tablicy $obiad = array( Słodka kukurydza ze szparagami , Kurczak cytrynowy , Duszone grzyby z bambusem ); 66 | Rozdział 4. Praca z tablicami $posilki = count($obiad); print Mamy $posilki potrawy na obiad. ; Wykonanie kodu z listingu 4.6 spowoduje wyświetlenie: Mamy 3 potrawy na obiad. Kiedy przekażesz pustą tablicę (to znaczy tablicę nie zawierającą elementów), funkcja zwróci 0. W wyrażeniach testowych konstrukcji if() pusta tablica przyjmie wartość fałsz. Wykonywanie pętli na tablicach Jedną z najczęstszych czynności wykonywanych za pomocą tablic jest indywidualne rozpatry- wanie każdego elementu w tablicy i jego przetwarzanie. Działanie to może obejmować włą- czenie elementu do wiersza tabeli HTML lub dodanie jego wartości do funkcjonującej całości. Najłatwiejszym sposobem przechodzenia przez kolejne elementy tablicy jest zastosowanie funkcji foreach(). Konstrukcja foreach() pozwala na jednokrotne uruchomienie bloku ko- du dla każdego elementu tablicy. Przykład z listingu 4.7 wykorzystuje funkcję foreach() do wyświetlenia tabeli HTML zawierającej każdy element tablicy. Listing 4.7. Wykonywanie pętli za pomocą polecenia foreach() $posilek = array( sniadanie = Włoskie orzechy , lunch = Orzechy i białe grzyby , przekaska = Suszone morwy , obiad = Bakłażan z sosem chili ); print table ; foreach ($posilek as $klucz = $wartosc) { print tr td $klucz /td td $wartosc /td /tr ; } print /table ; Wykonanie kodu z listingu 4.7 spowoduje wyświetlenie następujących wierszy: table tr td sniadanie /td td Włoskie orzechy /td /tr tr td lunch /td td Orzechy i białe grzyby /td /tr tr td przekaska /td td Suszone morwy /td /tr tr td obiad /td td Bakłażan z sosem chili /td /tr /table Dla każdego elementu w tablicy $posilek konstrukcja foreach() kopiuje klucz elementu do zmiennej $klucz oraz wartość do zmiennej $wartosc. Następnie uruchamia blok kodu zawarty wewnątrz nawiasów klamrowych. Program z listingu 4.7 powoduje wyświetlenie zmiennych $klucz i $wartosc wraz z pewnym kodem HTML w wierszu tabeli. Dla klucza i jego wartości wewnątrz bloku kodu możesz użyć jakichkolwiek nazw zmiennych. Jednak jeśli nazwy zmien- nych zostały użyte przed konstrukcją foreach(), zostaną nadpisane wartościami z tablicy. Kiedy używasz konstrukcji foreach() do wyświetlenia danych w tabeli HTML, często chcesz zastosować naprzemienne kolory lub style dla każdego wiersza tabeli. Jest to bardzo łatwe do osiągnięcia, jeżeli przechowujesz wartości naprzemiennych kolorów w oddzielnej tablicy. Następnie przełącz zmienną pomiędzy 0 a 1 za każdym razem, gdy konstrukcja foreach() ma wyświetlić odpowiedni kolor. W przykładzie z listingu 4.8 wyborowi podlegają dwie war- tości koloru w tablicy $kolor_wiersza. Wykonywanie pętli na tablicach | 67 Listing 4.8. Naprzemienne kolory wiersza tabeli $kolor_wiersza = array( red , green ); $index_koloru = 0; $posilek = array( sniadanie = Włoskie orzechy , lunch = Orzechy i białe grzyby , przekaska = Suszone morwy , obiad = Bakłażan z sosem chili ); print table ; foreach ($posilek as $klucz = $wartosc) { print tr bgcolor= . $kolor_wiersza[$index_koloru] . ; print td $klucz /td td $wartosc /td /tr ; // Poniższy wiersz przełącza $index_koloru między 0 a 1. $index_koloru = 1 - $index_koloru; } print /table ; Kod przedstawiony na listingu 4.8 spowoduje wyświetlenie następujących wierszy: table tr bgcolor= red td sniadanie /td td Włoskie orzechy /td /tr tr bgcolor= green td lunch /td td Orzechy i białe grzyby /td /tr tr bgcolor= red td przekaska /td td Suszone morwy /td /tr tr bgcolor= green td obiad /td td Bakłażan z sosem chili /td /tr /table Zmiana zmiennych pętli takich jak $klucz i $wartosc wewnątrz bloku kodu foreach() nie wpływa na rzeczywistą tablicę. Jeżeli chcesz zmienić tablicę, użyj zmiennej $klucz jako in- deksu w tablicy. Technika ta została przedstawiona na listingu 4.9 do podwojenia ceny każ- dego elementu tablicy. Listing 4.9. Modyfikacja tablicy za pomocą konstrukcji foreach() $posilek = array( Włoskie orzechy = 1, Orzechy i białe grzyby = 4.95, Suszone morwy = 3.00, Bakłażan z sosem chili = 6.50); foreach ($posilek as $potrawa = $cena) { // zapis $cena = $cena * 2 NIE działa. $posilek[$potrawa] = $posilek[$potrawa] * 2; } // Przejdź przez kolejne elementy tablicy i wyświetl zmienione wartości. foreach ($posilek as $potrawa = $cena) { printf( Nowa cena potrawy s to .2f. ,$potrawa,$cena); } Wykonanie kodu przedstawionego powyżej spowoduje wyświetlenie: Nowa cena potrawy Włoskie orzechy to 2.00 zł. Nowa cena potrawy Orzechy i białe grzyby to 9.90 zł. Nowa cena potrawy Suszone morwy to 6.00 zł. Nowa cena potrawy Bakłażan z sosem chili to 13.00 zł. W przypadku konstrukcji foreach() występuje też bardziej zwięzła forma do zastosowania z tablicami liczbowymi. Jej użycie zostało przedstawione na listingu 4.10. Listing 4.10. Użycie konstrukcji foreach() z tablicami liczbowymi $obiad = array( Słodka kukurydza ze szparagami , Kurczak cytrynowy , Duszone grzyby z bambusem ); 68 | Rozdział 4. Praca z tablicami foreach ($posilek as $potrawa) { print Możesz zjeść: $posilek ; } Wykonanie kodu z listingu 4.10 spowoduje wyświetlenie: Możesz zjeść: Słodka kukurydza ze szparagami Możesz zjeść: Kurczak cytrynowy Możesz zjeść: Duszone grzyby z bambusem W tej formie konstrukcji foreach() po prostu określiłeś jedną nazwę zmiennej, a każdy ele- ment został skopiowany do tej zmiennej wewnątrz bloku kodu. Jednakże wewnątrz bloku kodu nie możesz uzyskać dostępu do klucza elementu. Aby monitorować za pomocą konstrukcji foreach() swoją pozycję w tablicy, musisz użyć oddzielnej zmiennej, której wartość będziesz zwiększał o jeden przy każdym wykonaniu blo- ku kodu konstrukcji foreach(). Wykorzystując polecenie for(), otrzymasz dokładną pozy- cję w zmiennej pętli. Pętla foreach() wskaże Ci wartość każdego elementu tablicy, natomiast pętla for() poda Ci pozycję każdego elementu tablicy. Nie ma struktury pętli, która podawa- łaby jednocześnie i wartość każdego elementu, i jego położenie. Zatem jeśli chcesz wiedzieć, na którym zatrzymałeś się elemencie w trakcie kolejnego prze- chodzenia przez tablicę liczbową, zamiast konstrukcji foreach() użyj polecenia for(). Twoja pętla for() powinna polegać na zmiennej pętli rozpoczynającej się od 0 i kończącej na war- tości o jeden mniejszej od całkowitej liczby elementów tablicy. Ten mechanizm został przed- stawiony na listingu 4.11. Listing 4.11. Kolejne przechodzenie przez elementy tablicy liczbowej za pomocą pętli for() $obiad = array( Słodka kukurydza ze szparagami , Kurczak cytrynowy , Duszone grzyby z bambusem ); for ($i = 0, $liczba_potraw = count($obiad); $i $liczba_potraw; $i++) { print Potrawą numer $i jest $obiad[$i] ; } Wynikiem działania powyższego listingu będzie wyświetlenie następujących wierszy: Potrawą numer 1 jest Słodka kukurydza ze szparagami Potrawą numer 2 jest Kurczak cytrynowy Potrawą numer 3 jest Duszone grzyby z bambusem Podczas przechodzenia przez kolejne elementy tablicy za pomocą funkcji for() masz do dys- pozycji działający licznik, dostępny dla elementu tablicy, w którym jesteś. Użyj tego licznika w połączeniu z operatorem współczynnika do uzyskania naprzemiennych kolorów wiersza tabeli. Odpowiedni kod został przedstawiony na listingu 4.12. Listing 4.12. Naprzemienne kolory wiersza tabeli uzyskane za pomocą funkcji for() $kolor_wiersza = array( red , green ); $obiad = array( Słodka kukurydza ze szparagami , Kurczak cytrynowy , Duszone grzyby z bambusem ); print table ; for ($i = 0, $liczba_potraw = count($obiad); $i $liczba_potraw; $i++) { print tr bgcolor= . $kolor_wiersza[$i 2] . ; print td Element $i /td td $obiad[$i] /td /tr ; } print /table ; Wykonywanie pętli na tablicach | 69 Przykład z listingu 4.12 określa prawidłowy kolor wiersza tabeli za pomocą $i 2. Wartość wynosi na przemian: 0 i 2, a $i jest parzyste i nieparzyste. Nie ma potrzeby wykorzystania oddzielnej zmiennej, jak na przykład $index_koloru w listingu 4.8, do przechowywania od- powiedniego koloru wiersza. Wynikiem działania listingu 4.12 będzie: table tr bgcolor= red td Element 1 /td td Słodka kukurydza ze szparagami /td /tr tr bgcolor= green td Element 2 /td td Kurczak cytrynowy /td /tr tr bgcolor= red td Element 3 /td td Duszone grzyby z bambusem /td /tr /table Kiedy przechodzisz przez kolejne elementy tablicy za pomocą konstrukcji foreach(), elemen- ty stają się dostępne w kolejności, w jakiej zostały dodane do tablicy. Pierwszym dostępnym jest element dodany jako pierwszy, drugi dodany element jest kolejnym i tak dalej. Jeżeli po- siadasz tablicę liczbową, której elementy zostały dodane w innej kolejności niż ich klucze są zwykle uporządkowane, może to spowodować powstanie nieoczekiwanych wyników. Pro- gram z listingu 4.13 nie wyświetli elementów tablicy w kolejności alfabetycznej czy liczbowej. Listing 4.13. Kolejność elementów tablicy a funkcja foreach() $litery[0] = A ; $litery[1] = B ; $litery[3] = D ; $litery[2] = C ; foreach ($litery as $litera) { print $litera; } Wykonanie powyższego programu spowoduje wyświetlenie: ABDC Aby zagwarantować dostęp do elementów w porządku liczbowym klucza, użyj polecenia for() do przejścia przez pętlę: for ($i = 0, $liczba_liter = count($litery); $i $liczba_liter; $i++) { print $litery[$i]; } Wynikiem działania powyższego kodu będzie: ABCD Jeśli szukasz określonego elementu w tablicy, nie musisz przechodzić kolejno przez całą ta- blicę, aby go znaleźć. Są bardziej efektywne sposoby na odszukanie poszczególnego elemen- tu. Aby sprawdzić element z określonym kluczem, użyj funkcji array_key_exists(), która została przedstawiona na listingu 4.14. Funkcja zwraca wartość prawda, jeżeli element z do- starczonym kluczem istnieje w tablicy. Listing 4.14. Sprawdzanie elementu z określonym kluczem $posilek = array( Włoskie orzechy = 1, Orzechy i białe grzyby = 4.95, Suszone morwy = 3.00, Bakłażan z sosem chili = 6.50, Krewetki = 0); // Krewetki są za darmo! $ksiazki = array( Przewodnik po chińskich znakach dla łasuchów , Jak gotować i jeść chińskie potrawy ); 70 | Rozdział 4. Praca z tablicami // To jest prawda. if (array_key_exists( Krewetki ,$posilek)) { print Tak, posiadamy krewetki. ; } // To jest fałsz. if (array_key_exists( Kanapka ze stekiem ,$posilek)) { print Posiadamy kanapkę ze stekiem. ; } // To jest prawda. if (array_key_exists(1, $ksiazki)) { print Element 1 to książka Jak gotować i jeść chińskie potrawy ; } Aby sprawdzić element o określonej wartości, użyj funkcji in_array(), jak to zostało przed- stawione na listingu 4.15. Listing 4.15. Sprawdzenie elementu z określoną wartością $posilek = array( Włoskie orzechy = 1, Orzechy i białe grzyby = 4.95, Suszone morwy = 3.00, Bakłażan z sosem chili = 6.50, Krewetki = 0); $ksiazki = array( Przewodnik po chińskich znakach dla łasuchów , Jak gotować i jeść chińskie potrawy ); // To jest prawda: klucz Suszone morwy posiada wartość 3.00. if (in_array(3, $posilek)) { print Cena wynosi 3 zł za sztuke. ; } // To jest prawda. if (in_array( Jak gotować i jeść chińskie potrawy , $ksiazki)) { print Posiadamy książkę Jak gotować i jeść chińskie potrawy. ; } // To jest fałsz: funkcja in_array() jest wrażliwa na wielkość liter. if (in_array( przewodnik po chińskich znakach dla łasuchów , $books)) { print Posiadamy książkę Przewodnik po chińskich znakach dla łasuchów. ; } Funkcja in_array() zwraca wartość prawda, jeśli znajdzie element o zadanej wartości. W przy- padku tej funkcji wielkość liter w trakcie porównywania łańcuchów ma znaczenie. Funkcja array_search() jest podobna do funkcji in_array(), różni się jednak od niej tym, że jeśli znajdzie szukany element, to zwraca klucz elementu zamiast wartości prawda. W przykładzie na listingu 4.16 funkcja array_search() zwraca nazwę potrawy, która kosztuje 6,50 zł. Listing 4.16. Znajdowanie elementu o określonej wartości $posilek = array( Włoskie orzechy = 1, Orzechy i białe grzyby = 4.95, Suszone morwy = 3.00, Bakłażan z sosem chili = 6.50, Krewetki = 0); $potrawa = array_search(6.50, $posilek); if ($potrawa) { print $potrawa kosztuje 6.50 zł. ; } Wynikiem działania kodu z listingu 4.16 będzie wyświetlenie wiersza: Bakłażan z sosem chili kosztuje 6.50 zł. Wykonywanie pętli na tablicach | 71 Modyfikacja tablic Możesz operować na indywidualnych elementach tablicy, podobnie jak na zmiennych ska- larnych, używając do tego operatorów arytmetycznych, logicznych i innych. Kod na listingu 4.17 przedstawia pewne operacje na elementach tablicy. Listing 4.17. Operacje na elementach tablicy $potrawy[ Wołowina Chow Foon ] = 12; $potrawy[ Wołowina Chow Foon ]++; $potrawy[ Pieczona kaczka ] = 3; $potrawy[ total ] = $potrawy[ Wołowina Chow Foon ] + $potrawy[ Pieczona kaczka ]; if ($potrawy[ total ] 15) { print Zjadłeś za dużo: ; } print Zjadłeś . $potrawy[ Wołowina Chow Foon ] . dania Wołowina Chow Foon. ; Kod z listingu 4.17 wyświetli: Zjadłeś za dużo: Zjadłeś 13 dania Wołowina Chow Foon. Wstawianie wartości elementu tablicy w łańcuch otoczony znakami podwójnego cudzysłowu lub dokumenty typu here document jest podobne do wstawiania liczb lub znaków. Najłatwiej- szym sposobem jest zawarcie elementu tablicy w łańcuchu bez umieszczania znaków cudzy- słowu wokół klucza elementu. Zostało to przedstawione na listingu 4.18. Listing 4.18. Wstawianie wartości elementu tablicy w łańcuch otoczony znakami podwójnego cudzysłowu $posilki[ sniadanie ] = Włoskie orzechy ; $posilki[ lunch ] = Bakłażan z sosem chili ; $ilosci = array(3, 6); print Na śniadanie chciałbym zjeść $posilki[sniadanie], a na lunch ; print chciałbym $posilki[lunch]. Poproszę $ilosci[0] na śniadanie oraz ; print $ilosci[1] na lunch. ; Wykonanie programu z listingu 4.18 spowoduje wyświetlenie: Na śniadanie chciałbym zjeść Włoskie orzechy, a na lunch chciałbym Bakłażan z sosem chili. Poproszę 3 na śniadanie oraz 6 na lunch. Mechanizm wstawiania widoczny na listingu 4.18 funkcjonuje jedynie z kluczami tablicy, któ- re składają się wyłącznie z liter, liczb oraz znaków podkreślenia. Jeżeli posiadasz klucz tabli- cy zawierający znaki odstępu bądź inne znaki interpunkcyjne, wstaw je w nawiasy klamro- we, jak to zostało przedstawione na listingu 4.19. Listing 4.19. Wstawianie wartości elementu tablicy za pomocą nawiasów klamrowych $posilki[ Włoskie orzechy ] = 3.95 zł ; $wezly[ www.przyklad.com ] = witryna internetowa ; print Włoskie orzechy kosztują {$posilki[ Włoskie orzechy ]}. ; print www.przyklad.com to jest {$wezly[ www.przyklad.com ]}. ; W wyniku działania powyższego programu otrzymamy: 72 | Rozdział 4. Praca z tablicami Włoskie orzechy kosztują 3.95 zł. www.przyklad.com to jest witryna internetowa. W łańcuchach otoczonych znakami podwójnego cudzysłowu lub dokumentach typu here do- cument jest obliczane wyrażenie zawarte wewnątrz nawiasów klamrowych, a następnie jego wartość zostaje umieszczona w łańcuchu. W listingu 4.19 użytymi wyrażeniami są samodziel- ne elementy tablicy, tak więc wartości elementów zostają włączone do łańcuchów. Do usunięcia elementu z tablicy służy funkcja unset(): unset($posilki[ Pieczona kaczka ]); Usunięcie elementu za pomocą funkcji unset() nie jest po prostu ustawieniem elementowi wartości 0 lub pustego łańcucha. Kiedy używasz unset() element nie jest dłużej brany pod uwagę w trakcie przechodzenia przez tablicę lub obliczania liczby elementów w tablicy. Uży- cie funkcji unset() na tablicy przedstawiającej spis produktów sprzedawanych w sklepie jest podobne do stwierdzenia, że sklep nie będzie dłużej oferował tego produktu. Ustawienie wartości elementu na 0 lub jako pusty łańcuch oznacza, że danego produktu tymczasowo nie ma w sklepie. Jeśli będziesz chciał od razu wyświetlić wszystkie wartości w tablicy, najszybciej osiągniesz to, używając funkcji implode(). Tworzy ona łańcuch przez połączenie wszystkich wartości w tablicy, które rozdziela separatorem łańcucha. Kod z listingu 4.20 wyświetla listę potraw, których nazwy są oddzielone przecinkami. Listing 4.20. Utworzenie łańcucha z tablicy za pomocą funkcji implode() $potrawy = array( Pieczony kurczak , Faszerowana kaczka , Ciasto dyniowe ); $menu = implode( , , $potrawy); print $menu; Wykonanie programu z listingu 4.20 spowoduje wyświetlenie: Pieczony kurczak, Faszerowana kaczka, Ciasto dyniowe Aby rozbić tablicę bez znaków rozdzielających, jako pierwszego argumentu funkcji implode() użyj pustego łańcucha: $litery = array( A , B , C , D ); print implode( ,$litery); Powyższy kod spowoduje wyświetlenie: ABCD Użyj funkcji implode(), aby uprościć wyświetlanie wierszy tabeli HTML, jak to zostało przed- stawione na listingu 4.21. Listing 4.21. Wyświetlanie tabeli HTML za pomocą funkcji implode() $potrawy = array( Pieczony kurczak , Faszerowana kaczka , Ciasto dyniowe ); print tr td . implode( /td td ,$potrawy) . /td /tr ; Uruchomiony program z listingu 4.21 wyświetli: tr td Pieczony kurczak /td td Faszerowana kaczka /td td Ciasto dyniowe /td /tr Funkcja implode() umieszcza swoje separatory między każdą wartością, a więc do utworze- nia kompletnego wiersza tabeli będziesz musiał również wyświetlić przed pierwszym ele- mentem znacznik otwierający wiersz oraz za ostatnim elementem znacznik zamykający. Modyfikacja tablic | 73 Odwrotnością funkcji implode() jest funkcja explode(). Powoduje ona rozbicie łańcucha i przekształcenie go do postaci tablicy. Argumentem separatora dla funkcji explode() jest łańcuch, który powinien szukać elementów rozdzielających tablicę. Przykład użycia funkcji explode() został zamieszczony na listingu 4.22. Listing 4.22. Zamiana łańcucha na tablicę za pomocą funkcji explode() $ryby = Okoń, Karp, Szczupak, Flądra ; $lista_ryb = explode( , , $ryby); print Drugą rybą z listy jest $lista_ryb[1] ; Wykonanie programu z listingu 4.22 spowoduje wyświetlenie: Drugą rybą z listy jest Karp. Sortowanie tablic Mamy kilka sposobów na sortowanie tablic. Użycie konkretnej funkcji zależy od tego, jak chcesz posortować swoją tablicę oraz jakiego jest ona rodzaju. Funkcja sort() sortuje tablice według wartości elementów. Powinna być używana jedynie na tablicach liczbowych, ponieważ w trakcie sortowania resetuje klucze. Przykład z listingu 4.23 przedstawia pewne tablice przed sortowaniem i po nim. Listing 4.23. Sortowanie za pomocą funkcji sort() $obiad = array( Słodka kukurydza ze szparagami , Kurczak cytrynowy , Duszone grzyby z bambusem ); $posilek = array( sniadanie = Włoskie orzechy , lunch = Orzechy i białe grzyby , przekaska = Suszone morwy , obiad = Bakłażan z sosem chili ); print Przed sortowaniem: ; foreach ($obiad as $klucz = $wartosc) { print $obiad: $klucz $wartosc ; } foreach ($posilek as $klucz = $wartosc) { print $posilek: $klucz $wartosc ; } sort($obiad); sort($posilek); print Po sortowaniu: ; foreach ($obiad as $klucz = $wartosc) { print $obiad: $klucz $wartosc ; } foreach ($posilek as $klucz = $wartosc) { print $posilek: $klucz $wartosc ; } Uruchomiony program z listingu 4.23 wyświetli nam: Przed sortowaniem: $obiad: 0 Słodka kukurydza ze szparagami $obiad: 1 Kurczak cytrynowy $obiad: 2 Duszone grzyby z bambusem $posilek: sniadanie Włoskie orzechy 74 | Rozdział 4. Praca z tablicami $posilek: lunch Orzechy i białe grzyby $posilek: przekaska Suszone morwy $posilek: obiad Bakłażan z sosem chili Po sortowaniu: $obiad: 0 Duszone grzyby z bambusem $obiad: 1 Kurczak cytrynowy $obiad: 2 Słodka kukurydza ze szparagami $posilek: 0 Bakłażan z sosem chili $posilek: 1 Orzechy i białe grzyby $posilek: 2 Suszone morwy $posilek: 3 Włoskie orzechy Obie tablice zostały przeorganizowane w kolejności rosnącej wartości elementu. Pierwszą war- tością w tablicy $obiad jest teraz Duszone grzyby z bambusem, natomiast w tablicy $posilek pierwszą wartością jest Bakłażan z sosem chili. Klucze w tablicy $obiad nie zostały zmie- nione, ponieważ była ona tablicą liczbową, zanim została posortowana. Jednakże klucze w ta- blicy $posilek zostały zastąpione przez liczby od 0 do 3. W celu posortowania tablicy asocjacyjnej użyj funkcji asort(), która trzyma klucze razem z ich wartościami. Kod z listingu 4.24 przedstawia tablicę $posilek z listingu 4.23 posorto- waną za pomocą funkcji asort(). Listing 4.24. Sortowanie za pomocą funkcji asort() $posilek = array( sniadanie = Włoskie orzechy , lunch = Orzechy i białe grzyby , przekaska = Suszone morwy , obiad = Bakłażan z sosem chili ); print Przed sortowaniem: ; foreach ($posilek as $klucz = $wartosc) { print $posilek: $klucz $wartosc ; } asort($posilek); print Po sortowaniu: ; foreach ($posilek as $klucz = $wartosc) { print $posilek: $klucz $wartosc ; } Wykonanie powyższego programu spowoduje wyświetlenie: Przed sortowaniem: $posilek: sniadanie Włoskie orzechy $posilek: lunch Orzechy i białe grzyby $posilek: przekaska Suszone morwy $posilek: obiad Bakłażan z sosem chili Po sortowaniu: $posilek: obiad Bakłażan z sosem chili $posilek: lunch Orzechy i białe grzyby $posilek: przekaska Suszone morwy $posilek: sniadanie Włoskie orzechy Przy zastosowaniu funkcji asort() wartości zostały posortowane w ten sam sposób, jak to mia- ło miejsce w przypadku użycia funkcji sort() ale tym razem klucze znajdują się obok siebie. Podczas gdy funkcje sort() oraz asort() sortują tablice według wartości elementu, to dzięki funkcji ksort() możesz również posortować tablicę według klucza. Utrzymuje ona razem pary klucz-wartość, ale ustawia kolejność par według klucza. Na listingu 4.25 tablica $posilek została posortowana za pomocą funkcji ksort(). Sortowanie tablic | 75 Listing 4.25. Sortowanie za pomocą funkcji ksort() $posilek = array( sniadanie = Włoskie orzechy , lunch = Orzechy i białe grzyby , przekaska = Suszone morwy , obiad = Bakłażan z sosem chili ); print Przed sortowaniem: ; foreach ($posilek as $klucz = $wartosc) { print $posilek: $klucz $wartosc ; } ksort($posilek); print Po sortowaniu: ; foreach ($posilek as $klucz = $wartosc) { print $posilek: $klucz $wartosc ; } W wyniku działania kodu z listingu 4.25 otrzymamy: Przed sortowaniem: $posilek: sniadanie Włoskie orzechy $posilek: lunch Orzechy i białe grzyby $posilek: przekaska Suszone morwy $posilek: obiad Bakłażan z sosem chili Po sortowaniu: $posilek: lunch Orzechy i białe grzyby $posilek: obiad Bakłażan z sosem chili $posilek: przekaska Suszone morwy $posilek: sniadanie Włoskie orzechy Tablica zostaje przeorganizowana, a klucze są teraz uporządkowane rosnąco w kolejności al- fabetycznej. Każdy element pozostaje niezmieniony; także wartość przypisana do klucza przed sortowaniem jest po sortowaniu taka sama dla każdego klucza. Jeżeli korzystając z funkcji ksort(), sortujesz tablicę liczbową, wówczas elementy przyjmują taki układ, że klucze zo- stają uporządkowane w rosnącej kolejności liczbowej. Jest to ta sama kolejność, od której roz- poczynasz podczas tworzenia tablicy za pomocą konstrukcji array() bądź []. Funkcje sortujące tablice sort(), asort() oraz ksort() mają swoje odpowiedniki sortujące w kolejności malejącej. Tymi funkcjami są odpowiednio rsort(), arsort() oraz krsort(). Mechanizm działania tych funkcji jest identyczny z zasadą działania wspomnianych wcze- śniej funkcji sort(), asort() i ksort(), z tą tylko różnicą, że sortują tablice od największego (lub alfabetycznie ostatniego) klucza lub wartości, a ich kolejne elementy są układane w ko- lejności malejącej. Przykład z listingu 4.26 przedstawia w działaniu funkcję arsort(). Listing 4.26. Sortowanie za pomocą funkcji arsort() $posilek = array( sniadanie = Włoskie orzechy , lunch = Orzechy i białe grzyby , przekaska = Suszone morwy , obiad = Bakłażan z sosem chili ); print Przed sortowaniem: ; foreach ($posilek as $klucz = $wartosc) { print $posilek: $klucz $wartosc ; } arsort($posilek); print Po sortowaniu: ; 76 | Rozdział 4. Praca z tablicami foreach ($posilek as $klucz = $wartosc) { print $posilek: $klucz $wartosc ; } Efektem działania powyższego kodu jest wyświetlenie następujących wierszy: Przed sortowaniem: $posilek: sniadanie Włoskie orzechy $posilek: lunch Orzechy i białe grzyby $posilek: przekaska Suszone morwy $posilek: obiad Bakłażan z sosem chili Po sortowaniu: $posilek: sniadanie Włoskie orzechy $posilek: przekaska Suszone morwy $posilek: lunch Orzechy i białe grzyby $posilek: obiad Bakłażan z sosem chili Używanie tablic wielowymiarowych Jak już zostało to wspomniane we wcześniejszym podrozdziale, „Podstawy tablic”, wartość elementu tablicy może być inną tablicą. Taka możliwość jest użyteczna, gdy zachodzi potrze- ba przechowywania danych, które będą bardziej skomplikowaną strukturą, a nie po prostu kluczem i pojedynczą wartością. Standardowa para klucz-wartość jest wystarczająca do po- równania nazwy posiłku (na przykład sniadanie lub lunch) z pojedynczą potrawą (na przy- kład Włoskie orzechy lub Kurczak z orzechami). Co się jednak stanie, kiedy każdy posiłek będzie się składał z niejednej potrawy? Wówczas wartości elementów powinny być tablicami, a nie łańcuchami. Użycie konstrukcji array() do utworzenia tablic, które zawierają więcej tablic jako wartości elementów, zostało przedstawione na listingu 4.27. Listing 4.27. Utworzenie tablic wielowymiarowych za pomocą konstrukcji array() $posilki = array( sniadanie = array( Włoskie orzechy , Kawa ), lunch = array( Orzechy , Białe grzyby ), przekaska = array( Suszone morwy , Solony krab z sezamem )); $lunche = array( array( Kurczak , Bakłażan , Ryż ), array( Wołowina , Szarlotka , Makaron ), array( Bakłażan , Tofu )); $przyprawy = array( Japonska = array( gorące = wasabi , słone = sos sojowy ), Chinska = array( gorące = musztarda , pikantne = jesion )); Dostęp do elementów w tych tablicach tablic jest uzyskiwany przez użycie większej ilości nawiasów kwadratowych identyfikujących elementy. Każdy zbiór nawiasów kwadratowych określa jeden poziom w całej tablicy. Kod na listingu 4.28 prezentuje, w jaki sposób uzyskać dostęp do elementów tablic zdefiniowanych na listingu 4.27. Listing 4.28. Dostęp do elementów tablic wielowymiarowych print $posilki[ lunch ][1]; // Białe grzyby print $posilki[ przekaska ][0]; // Suszone morwy print $lunche[0][0]; // Kurczak print $lunche[2][1]; // Tofu print $przyprawy[ Japonska ][ słone ]; // sos sojowy print $przyprawy[ Chinska ][ gorące ]; // musztarda Używanie tablic wielowymiarowych | 77 Każdy poziom tablicy jest nazwany wymiarem. Wszystkie tablice umieszczone w rozdziale przed tym podrozdziałem były tablicami jednowymiarowymi. Każda z nich posiadała jeden po- ziom kluczy. Tablice takie jak $posilki, $lunche i $przekaski przedstawione w listingu 4.28 są nazwane tablicami wielowymiarowymi, ponieważ każda z nich posiada więcej niż jeden wymiar. Tablice wielowymiarowe możesz również utworzyć i modyfikować za pomocą składni na- wiasów kwadratowych. Na listingu 4.29 zostały przedstawione pewne modyfikacje przepro- wadzane na tablicach wielowymiarowych. Listing 4.29. Manipulacje tablicami wielowymiarowymi $ceny[ obiad ][ Słodka kukurydza ze szparagami ] = 12.50; $ceny[ lunch ][ Orzechy i białe grzyby ] = 4.95; $ceny[ obiad ][ Duszony bambus z grzybami ] = 8.95; $ceny[ obiad ][ ogolem ] = $ceny[ obiad ][ Słodka kukurydza ze szparagami ] + $ceny[ obiad ][ Duszony bambus z grzybami ]; $specjalnosci[0][0] = Kasztanowe bułeczki ; $specjalnosci[0][1] = Włoskie orzechy ; $specjalnosci[0][2] = Orzeszki zmiemne ; $specjalnosci[1][0] = Sałatka ; $specjalnosci[1][1] = Włoska sałatka ; // Pomijając dodanie indeksu na końcu tablicy, // tworzymy $specjalnosci[1][2] $specjalnosci[1][] = Sałatka z orzeszków ziemnych ; Do kolejnego przechodzenia przez każdy wymiar tablicy wielowymiarowej użyj zagnieżdżo- nej pętli foreach() lub for(). W kodzie z listingu 4.30 do kolejnego przechodzenia przez wielowymiarową tablicę asocjacyjną została wykorzystana konstrukcja foreach(). Listing 4.30. Przejście za pomocą foreach() przez kolejne wymiary tablicy wielowymiarowej $przyprawy = array( Japonska = array( gorąca = wasabi , słona = sos sojowy ), Chinska = array( gorąca = musztarda , pikantna = jesion )); // Zmienna $kultura jest kluczem, a zmienna $przyprawy_kultury to wartość (tablicy). foreach ($przyprawy as $kultura = $przyprawy_kultury) { // $przyprawa jest kluczem, a $przyklad jest wartością. foreach ($przyprawy_kultury as $przyprawa = $przyklad) { print $culture przyprawą $flavor jest $example. ; } } Uruchomienie programu z listingu 4.30 spowoduje wyświetlenie: Japonska gorąca przyprawą jest wasabi. Japonska słona przyprawą jest sos sojowy. Chinska gorąca przyprawą jest musztarda. Chinska pikantna przyprawą jest jesion. Pierwsza pętla foreach() na listingu 4.30 powoduje przejście przez pierwszy wymiar tablicy $przyprawy. Klucze przechowywane w zmiennej $kultura są łańcuchami Japonska i Chinska. Natomiast wartości przechowywane przez zmienną $przyprawy_kultury są tablicami będą- cymi wartością elementów tego wymiaru. Kolejne przejście pętli foreach() przez te tablice 78 | Rozdział 4. Praca z tablicami wartości elementów kopiuje klucze takie jak gorąca i słona do tablicy $przyprawy, a warto- ści, na przykład wasabi i sos sojowy, do zmiennej $przyklad. Blok kodu należący do dru- giej pętli foreach() używa zmiennych z obu poleceń foreach() do wyświetlenia komplet- nego komunikatu. Podobnie jak zagnieżdżone pętle foreach() przechodzące kolejno przez wielowymiarową tablicę asocjacyjną, zagnieżdżone pętle for() przechodzą kolejno przez wielowymiarowe ta- blice liczbowe, jak to zostało przedstawione na listingu 4.31. Listing 4.31. Przejście za pomocą for() przez kolejne wymiary tablicy wielowymiarowej $specjalnosci = array( array( Kasztanowe bułeczki , Włoskie orzechy , Orzeszki ziemne ), array( Sałatka , Włoska sałatka , Sałatka z orzeszków ziemnych ) ); // Zmienna $liczba_specjalnosci wynosi 2: jest to liczba elementów w pierwszym wymiarze // tablicy $specjalnosci. for ($i = 0, $liczba_specjalnosci = count($specjalnosci); $i $liczba_specjalnosci; $i++) { // Zmienna $liczba_podelementow wynosi 3: jest to liczba elementów w każdej podtablicy. for ($m = 0, $liczba_podelementow = count($specjalnosci[$i]); $m $liczba_podelementow; $m++) { print Element [$i][$m] to . $specjalnosci[$i][$m] . ; } } Wykonanie powyższego programu spowoduje wyświetlenie: Element [0][0] to Kasztanowe bułeczki Element [0][1] to Włoskie orzechy Element [0][2] to Orzeszki ziemne Element [1][0] to Sałatka Element [1][1] to Włoska sałatka Element [1][2] to Sałatka z orzeszków ziemnych W listingu 4.31 dane wyjściowe pętli for() przechodzą przez dwa elementy tablicy $spe- cjalnosci. Wewnętrzna pętla for() przechodzi przez każdy element podtablic, które prze- chowują odmienne łańcuchy. W poleceniu wyświetlającym print argument $i jest indeksem w pierwszym wymiarze (elementy tablicy $specjalnosci), natomiast $m jest indeksem w dru- gim wymiarze (podtablicy). W celu umieszczania wartości z tablicy wielowymiarowej w łańcuchu otoczonym znakami podwójnego cudzysłowu lub dokumencie typu here document użyj składni nawiasów klam- rowych przedstawionej na listingu 4.19. W kodzie z listingu 4.32 zostały użyte nawiasy klam- rowe do interpolacji w celu uzyskania takich samych danych wyjściowych, jak w przypadku listingu 4.31. W rzeczywistości jedynym innym wierszem w listingu 4.32 jest ten, zawierający polecenie print. Listing 4.32. Interpolacja elementu tablicy wielowymiarowej $specjalnosci = array( array( Kasztanowe bułeczki , Włoskie orzechy , Orzeszki ziemne ), array( Sałatka , Włoska sałatka , Sałatka z orzeszków ziemnych ) ); // Zmienna $liczba_specjalnosci wynosi 2: jest to liczba elementów w pierwszym wymiarze // tablicy $specjalnosci. for ($i = 0, $liczba_specjalnosci = count($specjalnosci); $i $liczba_specjalnosci; $i++) { Używanie tablic wielowymiarowych | 79 // Zmienna $liczba_podelementow wynosi 3: jest to liczba elementów w każdej podtablicy. for ($m = 0, $liczba_podelementow = count($specjalnosci[$i]); $m $liczba_podelementow; $m++) { print Element [$i][$m] to {$specjalnosci[$i][$m]} ; } } Podsumowanie rozdziału W rozdziale czwartym zostały przedstawione następujące zagadnienia: Podstawowe komponenty tablicy: elementy, klucze i wartości. Dwa sposoby definiowania tablicy w programach: za pomocą konstrukcji array() oraz przy użyciu nawiasów kwadratowych. Pojęcie skrótów dostarczanych przez PHP dla tablic z kluczami liczbowymi. Zliczanie liczby elementów w tablicy. Przejście przez każdy element tablicy za pomocą funkcji foreach(). Naprzemienne kolory wierszy tabeli — zastosowanie funkcji foreach() oraz tablicy war- tości kolorów. Modyfikacja wartości elementu tablicy wewnątrz bloku kodu foreach(). Odwiedzanie każdego elementu tablicy liczbowej za pomocą funkcji for(). Naprzemienne kolory wierszy tabeli — zastosowanie funkcji foreach() oraz operatora współczynnika ( ). Zrozumienie kolejności, w której konstrukcje foreach() i for() przechodzą przez ele- menty tablicy. Sprawdzanie elementu tablicy z określonym kluczem. Sprawdzanie elementu tablicy z określoną wartością. Interpolacja wartości elementu tablicy do łańcucha. Usuwanie elementu z tablicy. Generowanie łańcuchów z tablicy za pomocą funkcji implode(). Generowanie tablicy z łańcucha za pomocą funkcji explode(). Sortowanie tablicy przy użyciu funkcji sort(), asort() lub ksort(). Odwrotne sortowanie tablicy. Definiowanie tablicy wielowymiarowej. Dostęp do poszczególnych elementów tablicy wielowymiarowej. Przejście do każdego elementu w tablicy wielowymiarowej za pomocą funkcji foreach() bądź for(). Interpolacja elementów tablicy wielowymiarowej do łańcucha. · · · · · · · · · · · · · · · · · · · · · · 80 | Rozdział 4. Praca z tablicami Ćwiczenia 1. 2. 3. 4. · · · · · · · · · · Na podstawie danych zebranych przez amerykański urząd statystyczny (Biura ds. Spisu Ludności) 10 największych miast amerykańskich (według wielkości populacji) w 2000 roku to: Nowy Jork, NY (8 008 278 osób) Los Angeles, CA (3 694 820 osób) Chicago, IL (2 896 016 osób) Houston, TX (1 953 631 osób) Filadelfia, PA (1 517 550 osób) Phoenix, AZ (1 321 045 osób) San Diego, CA (1 223 400 osób) Dallas, TX (1 188 580 osób) San Antonio, TX (1 144 646 osób) Detroit, MI (951 270 osób) Zdefiniuj tablicę (lub tablice), które będą przechowywać te informacje o położeniu i wiel- kości populacji. Wyświetl tabelę położenia oraz informacji o wielkości populacji, która będzie zawierać ogólną wielkość populacji we wszystkich dziesięciu miastach. Zmodyfikuj swój program z poprzedniego ćwiczenia tak, aby wiersze w tabeli wyniko- wej były ułożone według wielkości populacji. Następnie zmodyfikuj program w taki spo- sób, aby wiersze zostały ułożone w kolejności według nazw miast. Ponownie dokonaj modyfikacji programu z ćwiczenia pierwszego w taki sposób, aby ta- bela zawierała również wiersze przechowujące ogólną wielkość populacji dla każdego stanu przedstawionego na liście miast. Odnosząc się do każdego przedstawionego poniżej rodzaju informacji, określ, w jaki spo- sób przechowywałbyś te informacje w tablicy, a następnie podaj przykładowy kod, który tworzy taką tablicę z kilkoma elementami. Na przykład w przypadku pierwszego ele- mentu mógłbyś powiedzieć: „Tablica asocjacyjna, której kluczem jest nazwisko studenta, natomiast wartością w tablicy asocjacyjnej jest ocena oraz numer identyfikacyjny” (patrz poniżej): $uczniowie = array( Jan Kowalski = array( ocena = 5+ , id = 271231), ( Aneta Nowak = array( ocena = 5 , id = 818211)); a. Oceny i numery identyfikacyjne uczniów w klasie. b. Jak wiele sztuk każdego towaru jest przechowywanych w magazynie. c. Spis obiadów w szkole na cały tydzień — różne rodzaje każdego z posiłków (przy- stawka, danie główne, napój itd.) oraz koszt na każdy dzień. d. Imiona osób w Twojej rodzinie. e. Imiona, wiek oraz powiązania z Tobą osób z Twojej rodziny. Ćwiczenia | 81
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP5. Wprowadzenie
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: