Recursie en multidimensionale structuren in PHP
Gegeven is een multidimensionale array van een willekeurig niveau van genestheid, bijvoorbeeld zoals deze:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Zoals je kunt zien, heeft deze array een complexe structuur, en er wordt van uitgegaan dat deze structuur willekeurig kan zijn en de niveaus van genestheid willekeurig diep kunnen zijn.
Stel dat we alle primitieve (dat wil zeggen, geen arrays) elementen van onze array op het scherm willen weergeven. In dit geval kunnen we eenvoudigweg geen loops gebruiken om deze array te doorlopen, omdat de array een onregelmatige structuur heeft en een onbekend niveau van genestheid.
Maar voor het doorlopen van zo'n array is het erg handig om recursie te gebruiken.
Laten we eerst een functie maken, waarin we als parameter onze array doorgeven, en in de functie maken we een loop om onze array te doorlopen:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
De door ons gemaakte loop zal alleen
de elementen van de hoofdarray doorlopen. Dat wil zeggen, eerst
zal het 1 weergeven, dan [2, 7, 8],
en dan [3, 4, [5, [6, 7]].
Laten we nu in de loop primitieve elementen en array-elementen onderscheiden:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element is een array
} else {
// element is een primitief
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
En laten we het nu zo maken dat als ons element een array is, de functie zichzelf aanroept, en deze array als parameter doorgeeft:
<?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]]]]);
?>
Gegeven is een multidimensionale array van een willekeurig niveau van genestheid, bijvoorbeeld zoals deze:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Gebruik recursie om alle primitieve elementen van deze array op het scherm weer te geven.