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]]];
?>
Рекурсия ёрдамида бу массивнинг барча примитив элементларини экранга чиқаринг.