środa,
PHP: Tablice wielowymiarowe
Tablica jest wielowymiarowa, wtedy kiedy przynajmniej jeden z jej elementów jest tablicą. Wymiarów tablicy może być wiele, elementy „wewnętrznej” tablicy mogą być tablicami.
W pierwszym przykładzie zadeklarowano tablicę dwuwymiarową. Nie ma ona regularnej budowy, trzy elementy tablicy $a są tablicami o różnej od siebie liczbie elementów, jeden element jest liczbą. Prezentowana tablica została wyświetlona za pomocą funkcji printf().
$a = [
[12, 15, 11],
12,
[9, 16],
[7, 11, 19, 20]
];
print_r($a);
Wynik działania kodu z pierwszego przykładu.
Array
(
[0] => Array
(
[0] => 12
[1] => 15
[2] => 11
)
[1] => 12
[2] => Array
(
[0] => 9
[1] => 16
)
[3] => Array
(
[0] => 7
[1] => 11
[2] => 19
[3] => 20
)
)
W kolejnym przykładzie zadeklarowano w nieco inny sposób dokładnie taką samą tablicę jak poprzednio. Tym razem skrypt wykonuje konkretne zadanie, wyszukuje wszystkie parzyste liczby z tablicy. Przewidziano maksymalnie dwa wymiary tablicy (jeden poziom zagłębienia, wewnętrzna pętla foreach). Badając kolejne elementy tablicy, w przypadku kiedy element jest tablicą (is_array()), uruchamiana jest wewnętrzna pętla. Parzystość liczby można ustalić na kilka sposobów, w prezentowanym kodzie wykorzystano resztę z dzielenia (operator %). Jeśli jest reszta z dzielenia badanej liczby przez dwa ($x%2), wtedy liczba jest nieparzysta. Jeśli nie ma reszty (operator zaprzeczenia !), liczba jest parzysta. Znalezione w tablicy parzyste liczby są zapisywane jako elementy tablicy o nazwie $parzyste.
$a[] = [12, 15, 11];
$a[] = 12;
$a[] = [9, 16];
$a[] = [7, 11, 19, 20];
$parzyste = [];
foreach($a as $val) {
if(is_array($val)) {
foreach($val as $x) if(!($x%2)) $parzyste[] = $x;
} else {
if(!($val%2)) $parzyste[] = $val;
}
}
echo implode(', ', $parzyste);
W tablicach wielowymiarowych mogą wystąpić również tablice asocjacyjne. Jest to bardzo częsta sytuacja występująca podczas pobierania danych ze źródła zewnętrznego, np. z bazy danych. W ostatnim przykładzie generowane są plakietki dla pracowników. Zastosowane czytelne nazwy zmiennych, powodują, że kod nie powinien wymagać dodatkowych wyjaśnień.
$pracownicy[0]['nazwisko'] = 'Kowal';
$pracownicy[0]['imie'] = 'Jan';
$pracownicy[0]['stanowisko'] = 'referent';
$pracownicy[1]['nazwisko'] = 'Nowak';
$pracownicy[1]['imie'] = 'Adam';
$pracownicy[1]['stanowisko'] = 'informatyk';
$pracownicy[2]['nazwisko'] = 'Kos';
$pracownicy[2]['imie'] = 'Ewa';
$pracownicy[2]['stanowisko'] = 'kierownik';
foreach($pracownicy as $pracownik) {
echo "<div>
<h2>
{$pracownik['imie']}
{$pracownik['nazwisko']}
</h2>
<span>{$pracownik['stanowisko']}
</div>";