Rekurze a multidimenzionální struktury v PHP
Je dáno multidimenzionální pole libovolné úrovně vnoření, například takové:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Jak vidíte, toto pole má složitou strukturu a předpokládá se, že tato struktura může být libovolná a úrovně vnoření mohou být libovolně hluboké.
Předpokládejme, že chceme vypsat na obrazovku všechny primitivní (tedy ne pole) prvky našeho pole. V tomto případě pro průchod takového pole prostě nemůžeme použít cykly, protože pole má nepravidelnou strukturu a neznámou úroveň vnoření.
Naopak pro průchod takového pole bude velmi výhodné použít rekurzi.
Nejprve vytvořme funkci, do které parametrem budeme předávat naše pole, a ve funkci vytvořme cyklus pro průchod našeho pole:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Cyklus, který jsme vytvořili, bude procházet pouze
prvky hlavního pole. To znamená, že nejprve
vypíše 1, potom [2, 7, 8],
a potom [3, 4, [5, [6, 7]].
Nyní v cyklu oddělujme primitivní prvky a prvky-pole:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// prvek - pole
} else {
// prvek - primitiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
A nyní udělejme to, aby pokud je náš prvek pole, funkce zavolala sama sebe, a předala parametrem 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]]]]);
?>
Je dáno multidimenzionální pole libovolné úrovně vnoření, například takové:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Pomocí rekurze vypište všechny primitivní prvky tohoto pole na obrazovku.