PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Level im Array bestimmen



munkmill
22-04-2005, 20:00
Hallo,

ich habe folgendes Problem.
Ein mehrdimensionales Array wird per foreach durchsucht.

Bsp. für's Array:



$navigation = array (
1 => array ("name" => "Home",
"href" => "home/home.php"),
2 => array ("name" => "Links",
"href" => "links/links.php",
"sub" => array ( 21 => array (....
array...))),
3 => array ("name" => "Kontakt",
"href" => "contact/contact.php"));


Die Funktion, die das Array durchsucht ist rekursiv und soll nur dann den Array-Inhalt ausgeben, wenn das Array ein Sub-Array ist. Vor allem soll nur das Sub-Array ausgegeben werden.

Der Quelltext dazu:



function getArrayContent ($navigation, $level) {
$path = $this->getSelectedPath();
$active = ($id == $_SESSION['id']) || ((isset($path[$level])) && ($path[$level] == $id)) ? true : false;
foreach ($navigation as $id => $entry) {
if ($level) {
echo "....";
} // if
if ($active && isset($entry['sub'])) {
$this->getSubNavigation ($entry['sub'], $level + 1);
} // if
}

Also soll er wirklich nur dann was ausgeben, wenn er sich momentan im Unter-Array befindet. Foreach hat aber die Eigenheit, ins Unter-Array abzusteigen und dann den Rest aus dem Ober-Array zu lesen.

Weiß jemand Rat?

Viele Grüße,

Jan

spoensche
22-04-2005, 23:35
Hat das parent array eine nummerischen index (test[1])?
Ansonsten würde ich sagen so:
for ($i=0;$i<sizeof($navigation);$i++) {
if (is_array($navigation[$i])) {
foreach ($navigation as $nav)
echo $nav;
}
}

munkmill
23-04-2005, 09:00
Hallo spoensche,

naja, die Indizes sind so, wie oben beschrieben. Also [



$navigation = array (1 => array ("name" => "Home",
"href" => "home.php"),
2 => array (....)

...


Das Problem ist, dass er zwar erkennt, wenn ein Sub-Array auftritt, aber nachdem er das durchlaufen hat, wieder ins Parent zurückkehrt und den Rest von dort ausgibt.

Ich möchte also, dass, wenn er im 2. Array-Level ist, nur das 2. Array-Level ausgibt und sonst keins.

Deine Idee funktioniert da leider nicht wie gewünscht.

Viele Grüße,

Jan

munkmill
23-04-2005, 10:29
Ok, ich habs nun hinbekommen, allerdings ist es nicht die schönste Lösung, wie ich finde.

Ich lasse einen Zähler mitlaufen, der nur dann erhöht wird, wenn ein Unterarray erkannt wird. Ausserdem gibts nen Bool, der dann true ist, wenn ein Unterarray erkannt wurde.

Die Ausgabe erfolgt dann nur, wenn aktuelles Level gleich dem Zählerstand und der Bool true ist...

Nicht schön, aber selten. :rolleyes:

Jan