Rekursiya və çoxölçülü strukturlar PHP-də
Ixtiyari daxilolma səviyyəsinə malik çoxölçülü massiv verilmişdir, məsələn, belə:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Gördüyünüz kimi, bu massivin mürəkkəb strukturu var və güman edilir ki, bu struktur ixtiyari ola bilər və daxilolma səviyyələri istənilən qədər dərin ola bilər.
Tutaq ki, biz massivin bütün primitiv (yəni, massiv olmayan) elementlərini ekrana çıxarmaq istəyirik. Bu halda, belə bir massivi iterasiya etmək üçün sadəcə dövrələrdən istifadə edə bilməyəcəyik, çünki massivin qeyri-müntəzəm strukturu var və naməlum daxilolma səviyyəsi var.
Lakin belə bir massivi iterasiya etmək üçün rekursiyadan istifadə etmək çox əlverişli olardı.
Əvvəlcə bir funksiya edək, parametr kimi bizim massivimizi ötürəcəyik, və funksiyada massivimizi iterasiya etmək üçün bir dövrə edək:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Etmiş olduğumuz dövrə yalnız əsas massivin
elementlərini iterasiya edəcək. Yəni əvvəlcə
o 1 çıxardacaq, sonra [2, 7, 8],
və sonra [3, 4, [5, [6, 7]].
Gəlin indi dövrədə primitiv elementləri və massiv elementlərini ayıraq:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element - massiv
} else {
// element - primitiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Və indi elə edək ki, əgər bizim elementimiz bir massivdirsə, funksiya özünü çağırsın, parametr kimi bu massivi ötürsün:
<?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]]]]);
?>
Ixtiyari daxilolma səviyyəsinə malik çoxölçülü massiv verilmişdir, məsələn, belə:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Rekursiyadan istifadə edərək, bu massivin bütün primitiv elementlərini ekrana çıxarın.