Rekurzió és többdimenziós struktúrák PHP-ben
Adott egy tetszőleges beágyazási szintű többdimenziós tömb, például mint ez:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Amint látható, ennek a tömbnek összetett a szerkezete, és feltételezzük, hogy ez a szerkezet tetszőleges lehet, és a beágyazási szintek akármilyen mélyek lehetnek.
Tegyük fel, hogy ki szeretnénk írni az összes primitív (vagyis nem tömb) elemét a tömbünknek. Ebben az esetben egy ilyen tömb bejárásához egyszerűen nem használhatunk ciklusokat, mivel a tömb szabálytalan szerkezetű, és ismeretlen a beágyazási szintje.
Viszont egy ilyen tömb bejárásához nagyon kényelmes lesz a rekurzió használata.
Kezdetben készítsünk egy függvényt, amelynek paraméterként átadjuk a tömbünket, és a függvényben készítsünk egy ciklust a tömb bejárásához:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Az általunk készített ciklus csak a fő tömb
elemeit fogja bejárni. Vagyis először
kiírja a 1-et, majd a [2, 7, 8]-ot,
és végül a [3, 4, [5, [6, 7]]-ot.
Most válassuk szét a ciklusban a primitív elemeket és a tömb elemeket:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// elem - tömb
} else {
// elem - primitív
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
És most tegyük úgy, hogy ha az elemünk tömb, akkor a függvény magát hívja meg, átadva paraméterként ezt a tömböt:
<?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]]]]);
?>
Adott egy tetszőleges beágyazási szintű többdimenziós tömb, például mint ez:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Rekurzió segítségével írja ki az összes primitív elemét ennek a tömbnek a képernyőre.