zählen der "Ebenen" eines Arrays
depp
- php
moin
wie kann ich mit ner funktion rauskriegen, dass z.b. $arr['1']['ebene2']['e3'] über drei "ebenen" verfügt? konnte nix passendes finden.
danke für tipps
Hi depp,
wie kann ich mit ner funktion rauskriegen, dass z.b. $arr['1']['ebene2']['e3'] über drei "ebenen" verfügt?
Ich würde die Funktion array_count_levels() nehmen. [1]
[1] Du musst dir diese Funktion allerdings erst selber schreiben ;-)
Was du dazu brauchst:
- Foreach Schleife
- Kontrollstruktur if
- is_array()
- und das ganze rekursiv aufbauen.
MfG, Dennis.
das ganze is natürlich nicht optimiert o.ä. aber es scheint zu gehen:
function letzte_ebene_nr($arr, $ebene=0)
{
if(is_array($arr))
{
foreach($arr AS $arr_)
{
$rueckgabe=letzte_ebene_nr($arr_,$ebene+1);
}
}
else
{
$rueckgabe=$ebene;
}
return $rueckgabe;
}
echo letzte_ebene_nr($test_array);
hallo nochmal.
war noch grundlegend verbesserungsbedürftig. hier ne bessre variante der funktion:
function letzte_ebene_nr($arr, $ebene=0)
{
if(is_array($arr))
{
foreach($arr AS $arr_)
{
$aktion=letzte_ebene_nr($arr_,$ebene+1);
if($aktion>$rueckgabe)
$rueckgabe=$aktion;
}
}
else
{
$rueckgabe=$ebene;
}
return $rueckgabe;
}
Hallo depp,
wie kann ich mit ner funktion rauskriegen, dass z.b. $arr['1']['ebene2']['e3'] über drei "ebenen" verfügt? konnte nix passendes finden.
Eine eigenen Funktion gibt es dafür nicht, also musst du selber ran:
Beispielsweise setzt du zunächst eine Variabel $found = FALSE; und durchläufst per ForEach das Array, bis du ein Element findest, dass selber ein Array ist. Dort wiederholst du die Suche usw. Wenn du irgendwann dann auf ein Unter-Array stößst, was deiner gesuchten Ebene entspricht, dann setzt du $found = TRUE; und kannst du Schleifen terminieren lassen. Ist nun nach allen Schleifen $found == TRUE, dann hat das Array die gesuchte Anzahl an Ebenen.
Ich hoffe, das hilft dir weiter, Lucas
echo $begrüßung;
wie kann ich mit ner funktion rauskriegen, dass z.b. $arr['1']['ebene2']['e3'] über drei "ebenen" verfügt? konnte nix passendes finden.
So etwas gibt es nicht, weil ein Array unter PHP weder mehrdimensional ist noch über mehrere Ebenen geht oder wie auch immer man das ausdrücken will.
Ein Array besteht lediglich aus Elementen, die aber beliebigen Typs sein können. Ein Element kann ein Array sein (dessen Elemente wiederum vom Typ Array sein können). Ein Element kann aber auch ein Objekt sein. Diese Verschachtelungen können beliebig flach oder tief sein.
Um die maximale Anzahl dieser Verschachtelungen zu ermitteln, brauchst du
eine Variable, die die bisherige maximale Verschachtelungstiefe festhält, initialisiert mit 0
Dafür bietet sich eine statische Variable innerhalb der folgend erläuterten Funktion an.
static $maxlevel = 0;
eine Funktion, die als Parameter ein Array und einen Level-Zähler, vorbelegt mit 1, erwartet.
function array_level_count($array, $level = 1) {...}
Der erste Aufruf übergibt nur das Array; (damit geht $level in die erste Runde mit dem Default-Wert)
Wenn $level größer als $maxlevel ist: $level in $maxlevel ablegen
jedes Element des Arrays durchlaufen
Wenn es ein Array ist, array_level_count mit dem Element und $level + 1 als Parameter aufrufen
Der Rückgabewert der Funktion ist $maxlevel. Innerhalb der rekursiven Aufrufe ist er belanglos, aber als Endergebnis wirst du ihn dann haben wollen. :-)
Wenn du PHP5 hast, kannst du auch was mit array_walk_recursive() zusammenbauen.
echo "$verabschiedung $name";