Rekurzija in večdimenzionalne strukture v PHP
Dano je večdimenzionalno poljubno polje na ravni gnezditve, na primer takšno:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Kot lahko vidite, ima to polje kompleksno strukturo, pri čemer se predpostavlja, da je ta struktura lahko poljubna in so ravni gnezditve lahko poljubno globoke.
Recimo, da želimo izpisati vse primitivne (to je, ne polja) elemente našega polja. V tem primeru preprosto ne moremo uporabiti zank za pregled takšnega polja, ker ima polje nepravilno strukturo in neznano raven gnezditve.
Vendar pa bo za pregled takšnega polja zelo priročno uporabiti rekurzijo.
Za začetek naredimo funkcijo, kamor bomo kot parameter podali naše polje, v funkciji pa naredimo zanko za pregled našega polja:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Zanka, ki smo jo naredili, bo pregledovala le
elemente glavnega polja. To pomeni, da bo najprej
izpisala 1, nato [2, 7, 8],
in nato [3, 4, [5, [6, 7]].
Zdaj pa ločimo v zanki primitivne elemente in elemente-polja:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element - polje
} else {
// element - primitiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
In zdaj naredimo tako, da če je naš element - polje, funkcija pokliče samo sebe, in poda kot parameter to polje:
<?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]]]]);
?>
Dano je večdimenzionalno polje poljubne ravni gnezditve, na primer takšno:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Z uporabo rekurzije izpišite vse primitivne elemente tega polja na zaslon.