Rekursioon ja mitmemõõtmelised struktuurid PHP-s
Antud on mitmemõõtmeline massiiiv suvalise pesastustasemega, näiteks selline:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Nagu te näete, on sellel massiivil keeruline struktuur, kusjuures eeldatakse, et see struktuur võib olla suvaline ja pesastustasemed võivad olla ükskõik kui sügavad.
Oletame, et soovime kõik primitiivsed (st mitte massiivid) meie massiivi elemendid ekraanile kuvada. Sellisel juhul ei saaks me sellise massiivi läbimiseks kasutada lihtsalt tsükleid, kuna massiivil on ebaregulaarne struktuur ja teadmata pesastustase.
Kuid sellise massiivi läbimiseks on väga mugav kasutada rekursiooni.
Alustuseks loome funktsiooni, kuhu parameetrina edastame oma massiivi, ja funktsiooni sees teeme tsükli meie massiivi läbimiseks:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Meie poolt loodud tsükkel läbib ainult
põhimassiivi elemendid. See tähendab, et alguses
kuvab see 1, siis [2, 7, 8],
ja seejärel [3, 4, [5, [6, 7]].
Teeme nüüd tsüklis vahet primitiivsetel elementidel ja massiividel elementidel:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element on massiiv
} else {
// element on primitiiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Ja nüüd teeme nii, et kui meie element on massiiv, siis funktsioon kutsuks välja iseennast, edastades parameetrina selle massiivi:
<?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]]]]);
?>
Antud on mitmemõõtmeline massiiv suvalise tasemega pesastust, näiteks selline:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Kasutades rekursiooni, kuvage kõik selle massiivi primitiivsed elemendid ekraanile.