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?
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.
Einfache Funktion innerhalb von array_walk_recursive
, um die Verschachtelungsebene und die Schlüssel und Werte anzuzeigen:
Ein anderer zeigt use
mit einer Referenz, um ein Ergebnis zu erhalten:
Tags und Links arrays php nested-loops