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