Rekursioni dhe Strukturat Shumëdimensionale në PHP
Jepet një varg shumëdimensional i një niveli arbitrar fole, për shembull, si ky:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Siç e shihni, ky varg ka një strukturë komplekse, dhe supozohet se kjo strukturë mund të jetë arbitrare dhe nivelet e foles mund të jenë arbitrarisht të thella.
Le të themi se duam të shfaqim të gjithë elementët primitivë (pra, jo vargje) të vargut tonë. Në këtë rast, për të përsëritur një varg të tillë thjesht nuk do të mund të përdorim sythe, pasi vargu ka një strukturë të parregullt dhe një nivel foleje të panjohur.
Por, për të përsëritur një varg të tillë do të jetë shumë i përshtatshëm të përdoret rekursioni.
Së pari, le të bëjmë një funksion, në të cilin si parametër do të kalojmë vargun tonë, dhe brenda funksionit të bëjmë një cikël për të përsëritur vargun tonë:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Cikli që kemi krijuar do të përsërisë vetëm
elementët e vargut kryesor. Domethënë, fillimisht
do të shfaqë 1, pastaj [2, 7, 8],
dhe më pas [3, 4, [5, [6, 7]].
Tani, le të ndajmë në cikël elementët primitivë dhe elementët-vargje:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// elementi - varg
} else {
// elementi - primitiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Dhe tani le ta bëjmë që nëse elementi ynë është një varg, funksioni të thirret vetë, duke kaluar si parametër atë varg:
<?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]]]]);
?>
Jepet një varg shumëdimensional i një niveli arbitrar foleje, për shembull, si ky:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Duke përdorur rekursion, shfaqni të gjithë elementët primitivë të këtij vargu.