Rekurzia a multidimenzionálne štruktúry v PHP
Dané je pole ľubovoľnej úrovne vnorenia, napríklad takéto:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Ako vidíte, toto pole má zložitú štruktúru, pričom sa predpokladá, že táto štruktúra môže byť ľubovoľná a úrovne vnorenia môžu byť ľubovoľne hlboké.
Povedzme, že chceme vypísať na obrazovku všetky primitívne (teda nie polia) prvky nášho poľa. V tomto prípade na prechádzanie takéhoto poľa jednoducho nemôžeme použiť cykly, pretože pole má nepravidelnú štruktúru a neznámu úroveň vnorenia.
Na prechádzanie takéhoto poľa je však veľmi vhodné použiť rekurziu.
Na začiatok vytvoríme funkciu, do ktorej ako parameter pridáme naše pole a vo funkcii urobíme cyklus na prechádzanie nášho poľa:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Cyklus, ktorý sme vytvorili, bude prechádzať iba
prvky hlavného poľa. To znamená, že najprv
vypíše 1, potom [2, 7, 8],
a potom [3, 4, [5, [6, 7]].
Poďme teraz v cykle rozdeľovať primitívne prvky a prvky, ktoré sú poliami:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// prvok je pole
} else {
// prvok je primitívny
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
A teraz urobíme to, že ak je náš prvok pole, funkcia zavolá samu seba, pričom ako parameter predá toto pole:
<?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]]]]);
?>
Dané je multidimenzionálne pole ľubovoľnej úrovne vnorenia, napríklad takéto:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Pomocou rekurzie vypíšte všetky primitívne prvky tohto poľa na obrazovku.