Jeżeli nie wiesz jak skutecznie przeglądać każdy rodzaj tablic. Jeżeli sprawiają ci problem nie sekwencyjne tablice. Zapraszam do przeczytania artykułu, opisuję w nim jak sobie z tymi problemami poradzić.
PHP jako język nie kompilowany, nie posiada ścisłej kontroli typów danych. Tablice nie musza mieć z góry określonego typu, oraz wielkości. Jest to wygodne, ale sprzyja powstawaniu bałagany w tablicach i czasami nie da się ich dobrze wykorzystać. Zakładam że jako taką wiedze o tablicach posiadasz, więc nie będę dużo wyjaśniał.
W php tablice mogą być indeksowane liczbami całkowitymi (numeryczne), lub znakami (asocjacyjne). Pierwsza jest o tyle lepsza że cyfry stanowią typ porządkowy, więc można je wygodnie przeglądać przy użyciu pętli for, ale i to nic nie da jak mamy w tablicy wartości pod indeksami: 1, 17, 547 i 6759. Przebiegnięcie pętlą do indeksu o numerze 7000 da nam w rezultacie 4 wartości i 6996 wartości pustych. Możemy na takiej tablicy użyć funkcji count(), ale da ona w wyniku 4 i za wiele nam nie pomoże. W przypadku tablicy asocjacyjnej wogóle za wiele nie zadziałamy bo nie możemy użyć pętli dla typu porządkowego, a możemy przecież nie znać indeksów tablicy… i co wtedy… nie ma innego wyjścia jak jedna z poniższych metod.
Są dwie wg. mnie najlepsze metody przeglądania takich tablic jakie przed chwilą przedstawiłem.
Pierwsza: Przy wykorzystaniu funkcji list() oraz each()
Druga: Przy wykorzystaniu pętli foreach()
list() oraz each()
Funkcja list() jest funkcją lewostronną (lvalue). Argumentami może być lista zmiennych lub tablica. Funkcja list analizuje podane zmienne od lewej do prawej, a następnie przypisuje im odpowiadające wartości prawostronne (rvalue). Pamiętaj, list() może występować tylko po lewej stronie, nie możesz np.: wykorzystać jej do zamiany wartości:
| list( $a, $b ) = list( $b, $a ); |
Jest to błędem i na pewno nie zadziała. Drugą funkcja jest funkcja each() która zwraca z tablicy wartość, a następnie przesuwa jej wewnętrzny wskaźnik na następną wartość. Funkcja zwraca pary klucz wartość, uzasadnione jest więc użycie funkcji list() po lewej stronie. Połączenie funkcji list() z each() pozwala – jak już wcześniej napisałem – przypisywać wartości z tablicy zmiennym po lewej stronie. Naturalnie do przejrzenia wartości w tablicy należy użyć pętli while, gdyż nie znamy ilości iteracji jakie pętla ma wykonać. Pętla nie zwraca wartości oraz indeksów tych elementów które nie istnieją, tak więc tym sposobem zyskamy tylko istniejące elementy tablicy oraz ich indeksy. Przykładowa pętla wykorzystująca funkcje list() oraz each() wyglądałaby tak:
| while( list( $index, $wartosc ) = each( $tablica ) ) { echo $index . ” – ” . $wartosc . „<br>”; } |
Powyższy kod wypisze wszystkie indeksy i wartości z tablicy $tablica. W funkcji list() wszystkie zmienne nie są obowiązkowe, tak więc jeżeli chcemy pobrać same indeksy możemy użyć kodu:
| while( list( $index ) = each( $tablica ) ) { echo $index . „<br>”; } |
Analogicznie możemy pobrać same wartości, trzeba w tym przypadku jedna pozostawić przecinek:
| while( list( , $wartosc ) = each( $tablica ) ) { echo $wartosc . „<br>”; } |
W ten oto sposób możemy wyświetlać zawartość tablicy przy pomocy funkcji list() oraz each().
Pętla foreach()
Jest to nieco prostszy sposób, ale dostępny dopiero od wersji PHP 4. Jest to pętla która przebiega tablicę oraz zwraca jej wartości oraz opcjonalnie indeksy. W praktyce wygląda to tak:
| foreach( $tablica AS $wartosc ) { echo $wartosc . „<br>”; } |
tym sposobem wypisane zostaną wszystkie wartości z tablicy $tablica. Naturalnie puste wartości zostaną pominięte i nie będzie pustych wierszy w wyniku. Przy pomocy tej pętli możemy również wyświetlić indeksy, wygląda to tak:
| foreach( $tablica AS $index => $wartosc ) { echo $index . ” – ” . $wartosc . „<br>”; } |
powyższy kod spowoduje wypisanie wszystkich elementów tablicy $tablica wraz z jej indeksami. Należy pamiętać o znakach „=>” które są w tym wypadku konieczne. Niestety nie możliwe jest przy pomocy tej pętli wydobycie samego indeksu, zapis taki jak ten:
| foreach( $tablica AS $index => ) { echo $index . ” – ” . $wartosc . „<br>”; } |
jest błędny i nie będzie działał i nie ma sposobu aby takie coś wypaliło.
To tyle co chciałem powiedzieć na temat przeglądania tablic. Oczywiście nie są to jedyne sposoby, ale wg. one są warte uwagi.
