Rekursie en multidimensionele strukture in PHP
Gegee 'n multidimensionele skikking van arbitrêre vlak van innesteling, byvoorbeeld so een:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Soos jy kan sien, het hierdie skikking 'n komplekse struktuur, en dit word veronderstel dat hierdie struktuur arbitrêr kan wees en die vlakke van innesteling kan so diep wees as wat dit ook al is.
Kom ons sê ons wil alle primitiewe (d.w.s. nie skikkings nie) elemente van ons skikking op die skerm vertoon. In hierdie geval sal ons nie net lusse kan gebruik om deur so 'n skikking te iter nie, aangesien die skikking 'n onreëlmatige struktuur het en 'n onbekende vlak van innesteling.
Maar om so 'n skikking deur te gaan, sal rekursie baie gerieflik wees.
Laat ons eers 'n funksie maak wat ons skikking as parameter neem, en binne die funksie maak ons 'n lus om deur ons skikking te iter:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Die lus wat ons gemaak het, sal slegs die
elemente van die hoofskikking deurloop. Dit wil sê, eers
sal dit 1 vertoon, dan [2, 7, 8],
en dan [3, 4, [5, [6, 7]].
Laat ons nou in die lus onderskei tussen primitiewe elemente en skikking-elemente:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// element is 'n skikking
} else {
// element is primitief
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
En nou laat ons dit so maak dat as ons element 'n skikking is, die funksie haarself aanroep en hierdie skikking as parameter deurgee:
<?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]]]]);
?>
Gegee 'n multidimensionele skikking van arbitrêre vlak van innesteling, byvoorbeeld so een:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Gebruik rekursie om alle primitiewe elemente van hierdie skikking op die skerm te vertoon.