Рэкурсія і шматмерныя структуры ў PHP
Дадзены масіў шматмерны адвольнага ўзроўню ўкладзенасці, напрыклад, такі:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Як вы бачыце, гэты масіў мае складаную структуру, прычым мяркуецца, што гэтая структура можа быць адвольнай і ўзроўні ўкладзенасці могуць быць як заўгодна глыбока.
Няхай мы хочам вывесці на экран усе прымітыўныя (гэта значыць не масівы) элементы нашага масіва. У гэтым выпадку для перабору такога масіва ў нас проста не атрымаецца выкарыстоўваць цыклы, так як масіў мае няправільную структуру і невядомы ўзровень ўкладзенасці.
Затое для перабору такога масіва вельмі зручна будзе выкарыстоўваць рэкурсію.
Для пачатку зробім функцыю, у якую параметрам будзем перадаваць наш масіў, а ў функцыі зробым цыкл для перабору нашага масіва:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Зроблены намі цыкл будзе перабіраць толькі
элементы асноўнага масіва. Гэта значыць спачатку
ён выведе 1, потым [2, 7, 8],
а потым [3, 4, [5, [6, 7]].
Давайце цяпер будзем аддзяляць у цыкле элементы-прымітывы і элементы-масівы:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// элемент - масіў
} else {
// элемент - прымітыў
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
А цяпер зробім так, каб калі наш элемент - масіў, функцыя выклікала сама сябе, перадаючы параметрам гэты масіў:
<?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]]]]);
?>
Дадзены шматмерны масіў адвольнага ўзроўню ўкладзенасці, напрыклад, такі:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
З дапамогай рэкурсіі вывядзіце ўсе прымітыўныя элементы гэтага масіва на экран.