Rekursion och multidimensionella strukturer i PHP
Det finns en multidimensionell array av godtycklig nivå av kapsling, till exempel denna:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Som du kan se har denna array en komplex struktur, och det antas att denna struktur kan vara godtycklig och nivåerna av kapsling kan vara hur djupa som helst.
Låt oss säga att vi vill skriva ut alla primitiva (dvs inte arrayer) element i vår array. I det här fallet kommer vi helt enkelt inte att kunna använda loopar för att iterera över en sådan array, eftersom arrayen har en oregelbunden struktur och en okänd kapsningsnivå.
Däremot kommer rekursion att vara mycket användbart för att iterera över en sådan array.
Låt oss först skapa en funktion, där vi som parameter skickar in vår array, och i funktionen skapar vi en loop för att iterera över vår array:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Loopen vi skapat kommer endast att iterera över
elementen i huvudarrayen. Det vill säga, först
kommer den att skriva ut 1, sedan [2, 7, 8],
och sedan [3, 4, [5, [6, 7]].
Låt oss nu i loopen särskilja primitivelement och arrayelement:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// elementet är en array
} else {
// elementet är en primitiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Och låt oss nu göra så att om vårt element är en array, anropar funktionen sig själv, och skickar denna array som en 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]]]]);
?>
Det finns en multidimensionell array av godtycklig nivå av kapsling, till exempel denna:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Med hjälp av rekursion, skriv ut alla primitiva element i denna array på skärmen.