Kann die Anzahl der Dimensionen in einem Array gezählt werden?

8

Ich möchte in der Lage sein, die Ebene eines Arrays zu kennen, während es erstellt wird.

Der Code durchläuft eine Reihe von Verzeichnissen, um ein massives mehrdimensionales Array zu erstellen.

Während das Array erstellt wird, möchte ich wissen, wie tief ich in dem Array bin.

%Vor%

Im obigen Beispiel befindet sich das Stammverzeichnis in Ebene 1. Alle einzelnen Großbuchstaben befinden sich in Ebene 2. Alle Großbuchstaben mit einer Nummer befinden sich in Ebene 3. Alle Großbuchstaben mit einer Zahl und einem Kleinbuchstaben befinden sich in Ebene 4 .

Wenn ich das Array erstelle, gibt es irgendeine Möglichkeit für mich zu wissen, in welchem ​​Level ich bin? Das Array wird mit einer rekursiven Funktion erstellt.

Dies ist eine PHP-Frage.

    
Bryan Downing 26.08.2010, 19:10
quelle

5 Antworten

3

Eine schnelle und einfache Antwort besteht darin, einfach einen "depth" -Parameter zu Ihrer Funktion hinzuzufügen und ihn zu erhöhen, wenn die Funktion sich selbst aufruft.

    
Basic 26.08.2010, 19:13
quelle
5

Dies könnte tangential zu Ihrer Frage zu dem Array sein, aber Sie könnten zwei Fliegen mit einer Klappe schlagen, indem Sie einen rekursiven Verzeichnis-Iterator verwenden.

%Vor%

Was würde etwas ausgeben wie:

%Vor%

Wie Sie sehen können, wird RecursiveIteratorIterator::getDepth() verwendet, um die aktuelle Tiefe des rekursiven Iterators zu erhalten, was der Grund dafür ist, diesen Ansatz vorzuschlagen.

Alternative (wenn Sie ein Array verwenden müssen)

Angenommen, Ihre Array-Struktur sieht ungefähr so ​​aus:

%Vor%

Dann kann ein sehr ähnlicher Ansatz zum Abrufen der Werte von einem rekursiven Verzeichnis-Iterator (diesmal jedoch mit einem rekursiven Array-Iterator) verwendet werden. Eine schnelle Schleife über die "übergeordneten" Arrays kann uns den "Pfad" vom aktuellen Element zurück zum Root geben.

%Vor%

Die Ausgabe wäre die gleiche wie die frühere für den Verzeichnis-Iterator.

TL; DR Wir können rekursive Iteratoren von den SPL-Iteratoren verwenden, um das Arbeiten mit rekursiven / tiefe Strukturen viel einfacher.

TL; DR; TL; DR SPL, hey ja!

    
salathe 26.08.2010 20:08
quelle
3

Das sollte tun:

%Vor%     
Sarfraz 26.08.2010 19:14
quelle
0
%Vor%     
bobrik 26.08.2010 19:17
quelle
0

Vielleicht stellen Sie die falsche Frage. Was ist das Endziel? Zum Beispiel gibt es eine RecursiveDirectoryIterator -Klasse innerhalb von SPL, vielleicht wird das für Sie tun? Der Aufbau eines großen multidimensionalen Arrays wird viel Speicher verbrauchen, weshalb es vielleicht ausreichen würde, einfach rekursiv über all diese Dateien zu iterieren?

    
NikiC 26.08.2010 19:44
quelle