Rekurencja i struktury wielowymiarowe w PHP
Dana jest tablica wielowymiarowa o dowolnym poziomie zagnieżdżenia, na przykład taka:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Jak widzisz, ta tablica ma złożoną strukturę, przy czym zakłada się, że ta struktura może być dowolna, a poziomy zagnieżdżenia mogą być dowolnie głębokie.
Załóżmy, że chcemy wyświetlić wszystkie prymitywne (czyli nie tablice) elementy naszej tablicy. W tym przypadku do iteracji po takiej tablicy po prostu nie uda nam się użyć pętli, ponieważ tablica ma nieregularną strukturę i nieznany poziom zagnieżdżenia.
Za to do iteracji po takiej tablicy bardzo wygodnie będzie użyć rekurencji.
Na początek zróbmy funkcję, do której parametrem będziemy przekazywać naszą tablicę, a w funkcji zróbmy pętlę do iteracji po naszej tablicy:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Stworzona przez nas pętla będzie iterować tylko
po elementach głównej tablicy. Czyli na początku
wypisze 1, potem [2, 7, 8],
a potem [3, 4, [5, [6, 7]].
Zróbmy teraz tak, aby w pętli rozróżniać elementy-prymitywy i elementy-tablice:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element - tablica
} else {
// element - prymityw
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
A teraz zróbmy tak, aby jeśli nasz element to tablica, funkcja wywoływała samą siebie, przekazując parametrem tę tablicę:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
func($elem);
} else {
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Dana jest wielowymiarowa tablica o dowolnym poziomie zagnieżdżenia, na przykład taka:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Za pomocą rekurencji wypisz wszystkie prymitywne elementy tej tablicy na ekran.