Wyższa Szkoła Technologii Teleinformatycznych w Świdnicy Internetowe bazy danych wykład 9 dr inż. Jacek Mazurkiewicz e-mail: Jacek.Mazurkiewicz@pwr.wroc.pl
Operacje na tablicach (1) sort sortowanie alfanumeryczne rosnąco $produkty = array( Opony, Olej, Świece ); sort($produkty); porządek: Olej,Opony, Świece wielkość liter TAK: duże, małe A < Z, Z < z $ceny = array(400, 100, 20); sort($ceny); porządek: 20, 100, 400 asort sortowanie alfanumeryczne rosnąco wg wartości $ceny = array( Opony =>400, Olej =>100, Świece => 20); asort($ceny); porządek: według wartości elementu
ksort sortowanie alfanumeryczne rosnąco wg opisów $ceny = array( Opony =>400, Olej =>100, Świece => 20); ksort($ceny); porządek: według wartości opisów pól (kluczy) rsort, arsort, krsort sortowanie malejące - analogi sortowanie definiowane przez użytkownika KOD $produkty = array(array( OPO, Opony, 400), array( OLE, Olej, 100), array( SWI, Swiece, 20)); function porownaj($x, $y) { if ($x[0] == $y[0]) return 0; elseif ($x[0] < $y[0]) return 1; else return 1; } function porownaj($x, $y) { if ($x[2] == $y[2]) return 0; elseif ($x[2] < $y[2]) return 1; else return 1; } CENA usort($produkty, porownaj);
Operacje na tablicach (2) uasort, uksort sortowanie wg. użytkownika - analogi sortowanie odwrotne definiowane przez użytkownika $produkty = array(array( OPO, Opony, 400), array( OLE, Olej, 100), function odporownaj($x, $y) array( SWI, Swiece, 20)); { if ($x[2] == $y[2]) CENA return 0; elseif ($x[2] < $y[2]) return 1; usort($produkty, odporownaj); else return -1; } shuffle losowe ustawienie kolejności elementów array_reverse kopia tablicy z odwróconą kolejnością
<?php $obrazy = array( opona.jpg, olej.jpg, swieca.jpg, drzwi.jpg, kierownica.jpg, termostat.jpg, uszczelka.jpg, wycieraczka.jpg, tarcza.jpg ); shuffle($obrazy);?> <html> <head> <title>części samochodowe</title> </head> <body> <center> <h1>części samochodowe</h1> <table width = 100%> <tr> <?php for ($i = 0; $i < 3; $i++) {echo <td align = center><img src=\ ; echo $obrazy[$i]; echo \ width = 100 height = 100></td> ;}?> </tr> </table> </center> </body> </html> <?php $liczby = array(); for ($i = 10; $i > 0; $i--) array_push($liczby, $i); $liczby = range(1, 10); $liczby = array_reverse($liczby);?>
array_push dodanie elementów na końcu tablicy array_push(nazwa_tablicy, elem_1, elem_2,...) co najmniej jeden element jest dodawany array_pop usunięcie ostatniego elementu tablicy array_pop(nazwa_tablicy) array_unshift dodanie elementów na początku tablicy array_unshift(nazwa_tablicy, elem_1, elem_2,...) co najmniej jeden element jest dodawany array_shift usunięcie pierwszego elementu tablicy array_shift(nazwa_tablicy) array_merge konkatenacja tablic array_merge(nazwa_tablicy_1, nazwa_tablicy_2,...) co najmniej dwie tablice są łączone
array_keys tablica z nazw kluczy tablicy istniejącej array_keys(nazwa_tablicy) array_values tablica z wartości tablicy istniejącej array_values(nazwa_tablicy) - ładowanie tablicy z pliku: <?php $zam = file( order.txt ); $il_zam = count($zam); if ($il_zam == 0) { echo <p><strong>brak zamówień</strong></p> ; } for ($i = 0; $i < $il_zam; $i++) { echo $zam[$i]. <br> ; }?> file: ładowanie pliku do tablicy jedna linia pliku jeden element tablicy count: liczba elementów zmiennej explode(łańcuch separator, łańcuch ciąg) rozbicie linii na elementy
Wędrówki po tablicy reset pierwszy element, wskaźnik na początku each bieżący element, przesuw wskaźnika do przodu reset(nazwa_tablicy) each(nazwa_tablicy) next(nazwa_tablicy) current(nazwa_tablicy) prev(nazwa_tablicy) end(nazwa_tablicy) next przesuw wskaźnika do przodu, bieżący element current bieżący element, wskaźnik bez zmian prev przesuw wskaźnika do tyłu, bieżący element end ostatni element, wskaźnik na końcu <?php while($element = each($ceny)) { echo $element[ key ]; echo ; echo $element[ value ]; echo <br> ; }?>
Dołączanie funkcji do elementów tablicy array_walk jednolita modyfikacja każdego elementu int array_walk(array tab, string func, [user_data]) function mojdrukuj($wartosc) { echo $wartosc<br> ; } array_walk($tablica, mojdrukuj ); function MojMnoz(&$wartosc, $klucz, $wsp) { $wartosc *= $wsp; } array_walk($tablica, MojMnoz, 3); Mojafunkcja(wartosc, klucz, dane) $klucz tylko dla zachowania składni, merytorycznie zbędny działanie przez referencję modyfikacja zawartości tablicy
Liczenie elementów tablicy count liczba elementów w zmiennej także tablicy sizeof liczba elementów w tablicy array_count_values w zasadzie to samo, ale uwaga! count(nazwa_tablicy) sizeof(nazwa_tablicy) array_count_values(nazwa_tablicy) <?php $tablica = array(4,5,1,2,3,1,2,1); $lt = array_count_values($tablica);?> klucz oblicza ile niepowtarzalnych wartości jest w tablicy tablica asocjacyjna: - klucze: pojedyncze wartości, - wartość numeryczna liczba powtórzeń danej wartości wartość 4 1 5 1 1 3 2 2 3 1
Konwersja tablicy na zmienne skalarne (1) extract tablica asocjacyjna na wartości skalarne extract(array tab [, int typ_ext [, string przedrostek]) $tablica=array( kl_1 => war_1, kl_2 => war_2, kl_3 => war_3 ); extract($tablica); echo $kl_1 $kl_2 $kl_3 ; war_1 war_2 war_3 z tablicy tworzy wartości skalarne o nazwach takich jak klucze tablicy typ ekstrakcji co robić w razie kolizji? typ EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL znaczenie nadpisanie ominięcie + przedrostek + przedrostek
Operacje na ciągach znaków $tablica=array( kl_1 => war_1, kl_2 => war_2, kl_3 => war_3 ) extract($tablica, EXTR_PREFIX_ALL, MojPR ); echo $MojPRkl_1 $MojPRkl_2 $MojPRkl_3 ; war_1 war_2 war_3 klucze i przedrostki muszą spełniać kryteria nazwy zmiennej! trim przycięcie początku i końca ltrim przycięcie początku chop przycięcie końca trim(ciąg) ltrim(ciąg) chop(ciąg) wycinaniu podlegają: spacje, \n, \r, \t, \v, koniec ciągu \0
Formatowanie przed prezentacją nl2br \n -> <br> print jak echo, zwraca boolean printf jak w C, formatowanie! printf( Wartość zamówienia wynosi %s, $wart); // $wart jako string printf( Wartość zamównienia wynosi %.2f, $wart); // $wart jako float, 2 miejsca po przecinku printf( Wartość zamówienia to %.2f (dostawa %.2f), $wart, $tr); %[dopełnienie][-][szerokość][.dokładność]typ znaki konwersji: b binarny, c character, d dziesiętnie, f float o ósemkowo, s string, x hex (a f), X HEX (A F)
Zmiana wielkości znaków strtoupper NA DUŻE ZNAKI strlower na małe znaki ucfirst Zmiana jak w zdaniu ucwords Każdy Wyraz w Zdaniu argument łańcuch znaków, zwraca łańcuch zmodyfikowany explode rozbicie ciągu wg. separatora, wynik w tablicy array explode(string separator, string łańcuch) implode działanie odwrotne do explode string implode(string separator, tablica) $tab_email = explode( @, $email); $email = implode( @, $tab_email);
strtok pobranie żetonów z ciągu string strtok(string łańcuch, string separator) $zeton = strtok($komentarz, ); // pierwsze wywołanie echo $zeton. <br> ; while ($zeton!= ) { $zeton = strtok( ); // kolejne wywołania tylko separator echo $zeton. <br> ; } dwa separatory obok siebie, jeden równy 0 pusty łańcuch substr dostęp do podciągu między początek a koniec string substr(string łańcuch, int start, [int długość]) $IchTroje = Keine Grenzen ; substr($ichtroje, 1); // eine Grenzen substr($ichtroje, -6); // Grenzen substr($ichtroje, 0, 5); // Keine substr($ichtroje, 1, -8); // eine
Porównywanie ciągów strcmp porównanie ciągów int strcmp(string ciąg_1, string ciąg_2) ciągi równe zwraca zero, ciąg_1 za ciąg_2 zwraca >0, ciąg_1 przed ciąg_2 zwraca <0, wielkość liter ważna! strcasecmp porównanie ciągów int strcasecmp(string ciąg_1, string ciąg_2) działa jak srtcmp, wielkość liter nie jest ważna! strnatcmp porównanie ciągów naturalne int strnatcmp(string ciąg_1, string ciąg_2) działa jak srtcmp, naturalność: 2 < 12
Znajdowanie ciągów w ciągach strstr, strchr odnajdywanie ciągu w ciągu string strstr(string stóg, string igła) jeśli znajdzie się ciąg pasujący do igła zwraca fragment stóg od igła jeśli nie odnajdzie false, znajdzie tylko pierwsze wystąpienie igły stristr odnajdywanie ciągu w ciągu string stristr(string stóg, string igła) działa jak srtstr, wielkość liter nie jest ważna! strrchr odnajdywanie ciągu w ciągu string strrchr(string stóg, string igła) jeśli znajdzie się ciąg pasujący do igła zwraca fragment stóg od igła jeśli nie odnajdzie false, znajdzie tylko ostatnie wystąpienie igły
Znajdowanie pozycji podciągu strpos odnajdywanie ciągu w ciągu int strpos(string stóg, string igła, [int offset]) zwraca pozycję pierwszego wystąpienia igła w stóg, liczenie od zera, offset może wskazać początek poszukiwania strrpos odnajdywanie ciągu w ciągu string strrpos(string stóg, string igła) zwraca pozycję ostatniego wystąpienia igła w stóg, liczenie od zera, offset może wskazać początek poszukiwania, igła = jeden znak strlen sprawdzenie długości ciągu int strlen(string łańcuch) zwraca długość łańcucha znaków
Zamiana podciągów str_replace zamiana wszystkich elementów na nowe string str_replace(string igła, string new_igła, string stóg) zamienia wszystkie elementy igła znalezione w stog na new_igła substr_replace zamiana konkretnego podciągu ciągu string substr_replace(string cg, string zam, int str [,int dl]) zamienia część ciągu cg na ciąg zam, str i dl określają, które części zostaną podmienione str początek szukania, dodatnia od początku ciągu, ujemna od końca dl określenie końca poszukiwania, jeśli go brak zamiana od str do końca dl = 0 - wstawienie ciągu bez nadpisywania dl > 0 - liczba znaków, które mają być zamienione na nowy ciąg dl < 0 - pozycja ciągu, na której zakończyć zamianę, liczona od końca