Рекурзија и вишедимензионалне структуре у PHP
Дат је вишедимензионални низ произвољног нивоа угнежђености, на пример, овакав:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Као што видите, овај низ има сложену структуру, при чему се претпоставља да ова структура може бити произвољна и нивои угнежђености могу бити произвољно дубоки.
Рецимо да желимо да испишемо на екран све примитивне (то jest, низове) елементе нашег низа. У том случају за претраживање таквог низа једноставно нећемо моћи да користимо петље, јер низ има неправилну структуру и непознат ниво угнежђености.
Али за претраживање таквог низа ће веома погодно бити користити рекурзију.
За почетак ћемо направити функцију, у коју као параметар преносимо наш низ, а у функцији правимо петљу за претраживање нашег низа:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Петља коју смо направили ће претраживати само
елементе главног низа. То jest, прво
ће исписати 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]]]]);
?>
А сада ћемо урадити тако да ако наш елемент jeste низ, функција позива саму себе, преносећи као параметар тај низ:
<?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]]];
?>
Користећи рекурзију, испишите све примитивне елементе овог низа на екран.