Gibt es eine Möglichkeit, ein mehrdimensionales Array zu durchlaufen, ohne dessen Tiefe zu kennen?

8

Bisher, wenn ich ein mehrdimensionales Array durchlaufen muss, verwende ich für jede Dimension eine foreach-Schleife.

z. B. für zwei Dimensionen

%Vor%

Was mache ich, wenn ich die Tiefe des Arrays nicht kenne? dh die Tiefe ist variabel.

Das Einzige, woran ich denken kann, ist, einen ganzen Stapel von Schleifen zu programmieren und die Schleife zu unterbrechen, wenn der nächste Wert kein Array ist. Das scheint etwas albern.

Gibt es einen besseren Weg?

    
Matthew Andrianakos 07.06.2012, 09:19
quelle

3 Antworten

17

Ja, Sie können die Rekursion verwenden. Hier ist ein Beispiel, in dem Sie alle Elemente in einem Array ausgeben:

%Vor%

Was Sie immer merken sollten, wenn Sie eine Rekursion durchführen, ist, dass Sie einen Basisfall brauchen, in den Sie nicht tiefer gehen.

Ich überprüfe gerne den Basisfall, bevor ich die Funktion fortsetze. Das ist eine allgemeine Redewendung, ist aber nicht unbedingt notwendig. Sie können die foreach -Schleife genauso gut einchecken, wenn Sie einen rekursiven Aufruf ausgeben oder ausführen, aber ich finde den Code oft schwieriger zu verwalten.

Der "Abstand" zwischen Ihrer aktuellen Eingabe und dem Basisfall wird als Variante bezeichnet und ist eine Ganzzahl. Die Variante sollte in jedem rekursiven Aufruf streng abnehmen. Die Variante im vorherigen Beispiel ist the depth of $a . Wenn Sie nicht an die Variante denken, riskieren Sie endliche Rekursionen und das Skript stirbt schließlich aufgrund eines Stack-Überlaufs . Es ist nicht ungewöhnlich, genau zu dokumentieren, was die Variante in einem Kommentar vor rekursiven Funktionen ist.

    
Emil Vikström 07.06.2012, 09:28
quelle
1

Sie können Rekursion für dieses Problem verwenden:

Hier ist ein Beispiel

%Vor%

Es wird Rekursion verwenden, um durch das Array

zu gehen

Es wird wie

gedruckt %Vor%     
Sanjay 07.06.2012 09:28
quelle
0

Einfache Funktion innerhalb von array_walk_recursive , um die Verschachtelungsebene und die Schlüssel und Werte anzuzeigen:

%Vor%

Ein anderer zeigt use mit einer Referenz, um ein Ergebnis zu erhalten:

%Vor%     
AbraCadaver 24.01.2018 21:35
quelle

Tags und Links