130 likes | 325 Views
Technologie internetowe. Wykład 6. Tablice. Wartości przechowywane w tablicy nazywane są elementami tablicy. Każdy z elementów tablicy posiada indeks (klucz) umożliwiający dostęp do niego. PHP obsługuje tablice indeksowane numerycznie , jak i asocjacyjne .
E N D
Technologie internetowe Wykład 6 Tablice
Wartości przechowywane w tablicy nazywane są elementami tablicy. Każdy z elementów tablicy posiada indeks (klucz) umożliwiający dostęp do niego. PHP obsługuje tablice indeksowane numerycznie, jak i asocjacyjne. Tablice indeksowane numerycznie stosowane są w większości języków programowania. W PHP indeks numeryczny zaczyna się od wartości "0". Tablice asocjacyjne stosowane w PHP jako wskaźnika używają najczęściej łańcucha znaków. Tablica to zmienna, która przechowuje zbiór lub sekwencję wartości. Tablica może posiadać wiele elementów, a każdy z nich może przechowywać pojedynczą zmienną, taką jak tekst bądź liczby, lub też inną zmienną. Tablice zawierające w sobie inne tablice są nazywane wielowymiarowymi. 0 1 2 indeksy Produkty
Tablice indeksowane numerycznie Tworzenie tablicy: $produkty[0] = "Ksiazki"; $produkty[1] = "Filmy VHS"; $produkty[2] = "Filmy DVD"; Albo konstrukcja array: $produkty = array("Ksiazki","Filmy VHS","Filmy DVD"); $produkty1 = array(1=>"Ksiazki","Filmy VHS","Filmy DVD"); //zmiana indeksu startowego $produkty2 = array(1=>"Ksiazki",3=>"Filmy VHS",5=>"Filmy DVD"); // „tablica rzadka" Dostęp do elementów tablicy: echo $produkty[1]; for ($i = 0; $i<3; $i++) echo $produkty[$i];
Tabliceasocjacyjne Tworzenie tablicy: $ceny = array("Biblia PHP"=>123, "Faraon"=>89, "Atlas świata"=>243); przykład tworzy tablicę w której nazwy produktów są kluczami, a ceny wartościami. $ceny["Pan Tadeusz"] = 149; Dostęp do elementów tablicy: echo $ceny["Pan Tadeusz"]; while ($el = each($ceny)){ echo $el["key"]; echo " - "; echo $el["value"]; echo "<br>";} funkcja each() zwraca bieżący element tablicy i przechodzi do następnego $el jest tablicą o 4 elementach: "key" i 0 – zawierają klucz bieżącego elementu tablicy $ceny "value" i 1 – zawierają wartość bieżącego elementu tablicy $ceny dla $ceny[1] to $el:
Instrukcjalist() Przypisywanie elementów tablicy do zmiennych Podobnie jak array(), nie jest funkcją, ale elementem składni języka. Instrukcjalist() jest używana do przypisywania listy zmiennych w jednej operacji. Uwaga: list() działa tylko z tablicami o indeksach liczbowych zakładając że indeksy zaczynają się od 0. Przyklad $ceny = array("Biblia PHP"=>123, "Faraon"=>89, "Atlas świata"=>243); list($a,$b,$c,)= each($ceny); echo $a;
Tablice heterogeniczne – wartości przechowywane w tablicy mogą być różnych typów. $mieszana = array("mały piesek", 63, 4.25, false); var_dump($mieszana); var_dump(tablica) wyświetla zawartość i typ zmiennej, dodając odstępy albo print_r (tablica) Tablice wielowymiarowe Elementy tablic mogą przechowywać inne tablice -> w ten sposób można utworzyć tablicę dwuwymiarową traktowaną jak macierz Tak zdefiniowana tablica składa się z trzech wektorów
Tworzenie tablicy dwuwymiarowej: a) indeksowanej numerycznie $prod = array(array ("PHP", "Biblia PHP", 123), array("FAR", "Faraon", 89), array("ASW", "Atlas świata", 243) ); Dostęp do elementów tablicy: echo $prod[0][1]; //itd lub: for( $rzad=0; $rzad<3; $rzad++) { for( $kol=0; $kol<3; $kol++) echo " | ".$prod[$rzad][$kol]; echo "<br>"; }
a) asocjacyjnej $prod = array( array ( "Kod"=>"PHP", "Nazwa"=>"Biblia PHP", "Cena"=>123 ), array( "Kod"=>"FAR", "Nazwa"=>"Faraon", "Cena"=>89 ), array( "Kod"=>"ASW", "Nazwa"=>"Atlas świata", "Cena"=>243) ); Dostęp do elementów tablicy: echo $prod[0]["Nazwa"]; //itd lub: for( $rzad=0; $rzad<3; $rzad++) echo " | ".$prod[$rzad]["Kod"]. " | ".$prod[$rzad]["Nazwa"]. " | ".$prod[$rzad]["Cena"]." |<br>";
Sortowanie tablic Funkcja sort() $produkty = array("Książki","Filmy VHS","Filmy DVD", "filmy DVD", "Plyty CD", Plyty VCD"); for($i=0; $i<6; $i++) echo $produkty[$i]."<br>"; echo "Oto produkty:<br>"; sort($produkty); echo "Oto sortowane produkty:<br>"; for($i=0; $i<5; $i++) echo $produkty[$i]."<br>"; rsort($produkty);//porządek odwrotny! for($i=0; $i<5; $i++) echo $produkty[$i]."<br>"; F. sort() zwraca uwagę na wielkość liter, dlatego wielkie litery zostaną umieszczone przed małymi
Podczas sortowania tablic asocjacyjnych zależy nam często na utrzymaniu razem kluczy i wartości. W takim przypadku należy użyć funkcji asort() lub ksort() $ceny = array("Biblia PHP"=>123, "Faraon"=>89, "Atlas świata"=>243, "Pan Tadeusz"=> 149); asort($ceny); echo "Towary wg. wartosci: <br> "; while ($el = each($ceny)){ echo $el["key"]; echo " - "; echo $el["value"]; echo "<br>"; } ksort($ceny); echo "Towary wg. nazwy: <br> "; while ($el = each($ceny)) echo $el["key"]." - ".$el["value"]."<br>"; Sortowanie odwrotne arsort() i krsort()
Iterowanie przez tablicę Instrukcja foreach() przypisuje wartość elementu zmiennej wskazywanej przez słowo kluczowe as foreach(tablica as wartość) { instrukcje }; $dlugosci = array(260, 194, 123, 67, 10, 0); foreach($dlugosci as $cm) { $cal = $cm / 2.54; echo " $cm centymetrów to $cal cali <br>"; } Wyszukiwanie minimalnej i maksymalnej wartości w tablicy min(tablica), max(tablica) echo "Najmniejsza wartosc:".min($dlugosci)." <br>"; echo "Najwieksza wartosc:".max($dlugosci)." <br>";
Liczenie elementów tablicy count(tablica) F. count() działa na wszystkich typach zmiennych i zwraca 0 jeśli badana jest zmienna pusta lub nieustawiona (można wykorzystać isset() i is_array()) Do rozdzielania ciągów na tablicę służy funkcja explode(). Jako pierwszy parametr trzeba do niej podać znak lub dłuższy ciąg który oddziela kolejne pola, jako drugi ciąg do rozdzielenia. <?php $dane="alfa;beta;gamma;delta"; $tablica = explode(";", $dane); ?>
Przekazywanie tablic do innego pliku metodą GET: serialize (zamiana tablicy na ciąg znaków) unserialize Dodatkowo konieczneaddslashes atripslashes <FORM method=get action="przechwyt_tab.php"> <?php $produkty = array("Ksiazki","Potop", 129.00); echo "Po serializacji...".$p2=stripslashes(serialize($produkty)); ?> <INPUT type ='hidden' value='<?php echo $p2?>' name='p2'> <INPUT type ='submit' value='wyslij'> </form> plik przechwyt_tab.php : <?php echo $_GET["p2"]."<BR>"; $p3=unserialize(stripslashes($_GET["p2"])); echo"<BR>"; echo $p3[0];?>