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]]];
?>
Рекурсия көмегімен осы массивтің барлық примитивті элементтерін экранға шығарыңыз.