Rekursion og multidimensionelle strukturer i PHP
Givet et multidimensionelt array med en vilkårlig niveau af indlejring, for eksempel sådan et:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Som du kan se, har dette array en kompleks struktur, og det antages, at denne struktur kan være vilkårlig, og niveauerne af indlejring kan være uendeligt dybe.
Lad os sige, at vi vil udskrive alle primitive (altså ikke arrays) elementer af vores array. I dette tilfælde vil vi simpelthen ikke kunne bruge loops til at gennemgå et sådant array, fordi arrayet har en uregelmæssig struktur og et ukendt indlejringsniveau.
Men for at gennemgå et sådant array vil det være meget praktisk at bruge rekursion.
Lad os starte med at lave en funktion, hvor vi som parameter sender vores array, og i funktionen laver vi et loop for at gennemgå vores array:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Det loop, vi har lavet, vil kun gennemgå
elementerne i hovedarrayet. Det vil sige, først
vil det udskrive 1, derefter [2, 7, 8],
og derefter [3, 4, [5, [6, 7]].
Lad os nu i løkken skelne mellem primitive elementer og array-elementer:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element er et array
} else {
// element er en primitiv værdi
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Og lad os nu gøre sådan, at hvis vores element er et array, kalder funktionen sig selv, og sender dette array som parameter:
<?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]]]]);
?>
Givet et multidimensionelt array med en vilkårlig niveau af indlejring, for eksempel sådan et:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Med hjælp af rekursion, udskriv alle primitive elementer af dette array.