aktuelle array dimension in einer foreach

Kipperlenny

Erfahrenes Mitglied
Moin

Wie kann ich bei einer foreach Schleife die aktuelle Dimension herausfinden?
Z.B. folgender Array:

Code:
Array
(
    [0] => Array
        (
            [id] => 3
            [0] => Array
                (
                    [id] => 4
                    [0] => Array
                        (
                            [id] => 5
                        )

                    [1] => Array
                        (
                            [id] => 6
                            [0] => Array
                                (
                                    [id] => 1
                                )

                            [1] => Array
                                (
                                    [id] => 7
                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 8
            [0] => Array
                (
                    [id] => 2
                )

            [1] => Array
                (
                    [id] => 9
                )

        )

)

und folgende Funktion:

PHP:
function arraydurchlauf($array) {
 foreach($array as $key=>$value) {	
 if($key == "id") //echo aktuelle dimension;
 else arraydurchlauf($value);
 }
}

danke
lenny

edit: des Hauptarrays meine ich natürlich :)
 
Zuletzt bearbeitet:
siehe mein Edit :)
Die Funktion ruft sich ja selbst auf, brauche also die Dimension des "Hauptarrays", nen Zähler mitlaufen lassen wäre ja in Ordnung, allerdings muss sich der ja auch zurücksetzen....
 
Wenn ich dich richtig verstanden habe, meinst du so etwas:
PHP:
function arraydurchlauf($array, $count = true ) {
static $i = 0;
 foreach($array as $key=>$value) {
if( $count ) $i++
 if($key == "id") echo $i;
 else arraydurchlauf($value, false);
 }
}
 
Der Array stellt eine Menu Sturktur da - die Dimensionen die Ebenen - den Array kann ich nicht anders aufbauen, da er so von scriptacolus kommt (js Framework).

Wenn der key == "id" ist, dann weiß ich, dass die Seite mit der $value zu dem key auf dieser Ebene ist. Wenn key allerdings ein Array ist, dann representiert das eine Ebene tiefer im Menu, wenn dann also eine id kommt, dann steht die Seite mit der ID eine Ebene tiefer.

Daher muss ich wissen in welcher Dimension ich mich gerade befinde:

array {
[id] => 1 // dimension 1
[0] => Array {
[id] =>2 // dimension 2
}
}

EDIT (Zu der Antwort von 'Deluxe) :
Nun ja, das kommt dem schon nahe glaub ich, aber der Counter wird ja dann bei "eine Dimension höher" nicht -- genommen sondern auf 0 gesetzt oder?
Es kann ja sein, dass ich aus Menu Ebene 3 zu Menu Ebene 2 springe (und nicht immer zu Ebene 0).
 
Zuletzt bearbeitet:
aber der Counter wird ja dann bei "eine Dimension höher" nicht -- genommen sondern auf 0 gesetzt oder?
Nein.
Dennoch ist es nicht das was du brauchst, da ich es anders verstanden hatte.

Das sollte jedoch eher sein, was du brauchst.
PHP:
function arraydurchlauf( $array, $level = 0 ) {
	$i = 0;
	foreach( $array as $value ) {
		if ( is_array( $value ) ) {
			echo $value['id'].' (level '.($level + $i).')<br/>';
			arraydurchlauf( $value, ( $level + $i ) );
		}
		else $i++;
	}
}
Versuch die Logik dahinter einfach mal zu verstehen. ;)
 
Zurück