Rekurzija i višedimenzionalne strukture u PHP-u
Dat je višedimenzionalni niz proizvoljnog nivoa ugnježdenosti, na primer, ovakav:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Kao što vidite, ovaj niz ima složenu strukturu, i podrazumeva se da ova struktura može biti proizvoljna i nivoi ugnježdenosti mogu biti proizvoljno duboki.
Recimo da želimo da prikažemo sve primitivne (to jest, one koji nisu nizovi) elemente našeg niza. U ovom slučaju za prolazak kroz takav niz jednostavno ne možemo koristiti petlje, jer niz ima nepravilnu strukturu i nepoznati nivo ugnježdenosti.
Međutim, za prolazak kroz takav niz veoma zgodno će biti koristiti rekurziju.
Za početak, napravićemo funkciju u koju ćemo kao parametar proslediti naš niz, a u funkciji ćemo napraviti petlju za prolazak kroz naš niz:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Petlja koju smo napravili će prolaziti samo kroz
elemente glavnog niza. To jest, prvo
će ispisati 1, zatim [2, 7, 8],
a potom [3, 4, [5, [6, 7]].
Hajde sada da u petlji razdvajamo elemente-primitive i elemente-nizove:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element je niz
} else {
// element je primitiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
A sada hajde da uradimo tako da, ako naš element jeste niz, funkcija poziva samu sebe, prosleđujući kao parametar taj niz:
<?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]]]]);
?>
Dat je višedimenzionalni niz proizvoljnog nivoa ugnježdenosti, na primer, ovakav:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Koristeći rekurziju, prikažite sve primitivne elemente ovog niza na ekranu.