Rekursion und mehrdimensionale Strukturen in PHP
Gegeben ist ein mehrdimensionales Array beliebiger Verschachtelungstiefe, zum Beispiel dieses:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Wie Sie sehen können, hat dieses Array eine komplexe Struktur, wobei davon ausgegangen wird, dass diese Struktur beliebig sein kann und die Verschachtelungsebenen beliebig tief sein können.
Angenommen, wir möchten alle primitiven (das heißt, keine Arrays) Elemente unseres Arrays auf dem Bildschirm ausgeben. In diesem Fall könnten wir einfach keine Schleifen verwenden, um ein solches Array zu durchlaufen, da das Array eine unregelmäßige Struktur hat und der Verschachtelungsgrad unbekannt ist.
Allerdings eignet sich Rekursion sehr gut zum Durchlaufen eines solchen Arrays.
Erstellen wir zunächst eine Funktion, der wir unser Array als Parameter übergeben, und in der Funktion erstellen wir eine Schleife, um unser Array zu durchlaufen:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Die von uns erstellte Schleife durchläuft nur
die Elemente des Hauptarrays. Das heißt, zunächst
gibt sie 1 aus, dann [2, 7, 8],
und dann [3, 4, [5, [6, 7]].
Lassen Sie uns nun in der Schleife primitive Elemente und Array-Elemente unterscheiden:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// Element ist ein Array
} else {
// Element ist ein Primitiv
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Und nun sorgen wir dafür, dass, falls unser Element ein Array ist, die Funktion sich selbst aufruft und dieses Array als Parameter übergibt:
<?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]]]]);
?>
Gegeben ist ein mehrdimensionales Array beliebiger Verschachtelungstiefe, zum Beispiel dieses:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Geben Sie mithilfe von Rekursion alle primitiven Elemente dieses Arrays auf dem Bildschirm aus.