Rekursiya va ko‘p o‘lchovli tuzilmalar PHPda
Ixtiyoriy darajadagi chuqurlikdagi ko‘p o‘lchovli massiv berilgan, masalan:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Ko‘rib turganingizdek, bu massiv murakkab tuzilishga ega, va bu tuzilish ixtiyoriy bo‘lib, chuqurlik darajalari cheksiz chuqur bo‘lishi mumkin.
Faraz qilaylik, biz massivning barcha oddiy (yani massiv bo‘lmagan) elementlarini ekranga chiqarmoqchimiz. Bunday massivni takrorlash uchun sikllardan foydalanish imkonsiz, chunki massiv noto‘g‘ri tuzilishga va noma'lum chuqurlik darajasiga ega.
Buning o‘rniga, bunday massivni takrorlash uchun rekursiyadan foydalanish juda qulay.
Boshlanishida, parametr sifatida massivni qabul qiladigan funksiya yaratamiz va funksiya ichida massivni takrorlash uchun sikl yaratamiz:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Biz yaratgan sikl faqat asosiy massivning
elementlarini takrorlaydi. Ya'ni, avval 1 ni,
keyin [2, 7, 8] ni va
keyin [3, 4, [5, [6, 7]] ni chiqaradi.
Keling, siklda oddiy elementlar va massiv elementlarini ajratamiz:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element - massiv
} else {
// element - oddiy
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Endi, agar elementimiz massiv bo‘lsa, funksiya o‘zini chaqirib, parametr sifatida shu massivni uzatadi:
<?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]]]]);
?>
Ixtiyoriy darajadagi chuqurlikdagi ko‘p o‘lchovli massiv berilgan, masalan:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Rekursiya yordamida bu massivning barcha oddiy elementlarini ekranga chiqaring.