ColoredScy
Mitglied
Thread Starter
- Dabei seit
- 15.01.2004
- Beiträge
- 78
- Reaktionspunkte
- 0
hallo...
ich möchte aus einem mehrdimensionalen array eine html-liste erstellen (und bekomms weiss gott nicht auf die reihe, dass die tags an den richtigen stellen geschlossen werden).
folgendermaßen sieht mein array (vereinfacht) aus:
"first" und "last" sind jeweils "1", wenn der entsprechende eintrag der oberste/unterste in seiner hierarchie-ebene ist.
das ganze soll dann als <ul> ausgegeben werden - in etwa so:
mein letzter entwurf dazu sieht wie folgt aus:
...nur leider funktionierts nicht ganz. ich habe in diesem versuch komplett nur mit den first/last gearbeitet, da bei ersten versuchen mit der positionsnummer nur noch falscheres bei mir raus kam - vill. kann mir ja jemand die augen öffnen oder weiss nen brauchbaren link/tipp für mich (hab leider selber keinen gefunden).
ich möchte aus einem mehrdimensionalen array eine html-liste erstellen (und bekomms weiss gott nicht auf die reihe, dass die tags an den richtigen stellen geschlossen werden).
folgendermaßen sieht mein array (vereinfacht) aus:
Code:
$meinarray = array
(
"name" => anzuzeigender name,
"pos" => wie weit eingerückt es sein soll,
"fist" => 1 oder 0,
"last" => 1 oder 0
);
das ganze soll dann als <ul> ausgegeben werden - in etwa so:
Code:
0: A
1: A.a
2: A.b
3: A.b.a
4: A.b.b
5: B
6: B.a
mein letzter entwurf dazu sieht wie folgt aus:
PHP:
$meinarray[] = array ("name"=>"A", "pos"=>0, "first"=>1, "last"=>0);
$meinarray[] = array ("name"=>"A.a", "pos"=>1, "first"=>1, "last"=>0);
$meinarray[] = array ("name"=>"A.b", "pos"=>1, "first"=>0, "last"=>1);
$meinarray[] = array ("name"=>"A.b.a", "pos"=>2, "first"=>1, "last"=>0);
$meinarray[] = array ("name"=>"A.b.b", "pos"=>2, "first"=>0, "last"=>1);
$meinarray[] = array ("name"=>"B", "pos"=>0, "first"=>0, "last"=>1);
$meinarray[] = array ("name"=>"B.a", "pos"=>1, "first"=>1, "last"=>1);
print_r($meinarray);
function menuout($i=-1) { // vorbelegung mit -1, da ich unten gleich um eins erhöhe und damit auf 0 als ausgangswert komme
global $meinarray;
$go=true; // keine schöne lösung, eine variable zum abbruch zu nehmen, aber ich war verzeifelt ;)
while ($go) {
$i++; // zähler erhöhen
$j=$i;
if ($meinarray[$i]['first']) { // jeder mit first gekennzeichnete eintrag startet mit einem <ul>
echo "<ul>";
}
echo "<li>"; // absolut jeder eintrag hat ein <li> vor seinem namen
echo $meinarray[$i]['name'];
if (isset($meinarray[($i+1)]) // sollte es den nächsten eintrag geben (ist bei dem letzten arrayeintrag nicht der fall)...
&& $meinarray[($i+1)]['first']) // und sollte dieser ein "first" sein (und damit ein neuer unterpunkt)...
{
$j = menuout(($i)); // ... dann soll die rekursion los gehen
// j enthällt jetzt den rückgabewert, bei dem der letzte
}
echo "</li>";
if ($meinarray[$i]['last']) { // sollte dieser eintrag als der letzte seiner hierarchie merkiert sein,
echo "</ul>"; // dann </ul> ausgeben und die rekursion beenden
return $i;
$go=false;
}
if ($j>$i) { $i=$j; } // sollte sich j erhöht haben, so ist eine rekursion gelaufen und dessen zähler wird übernommen
if ($i==sizeof($meinarray)) { $go=false; }
}
}
menuout();
...nur leider funktionierts nicht ganz. ich habe in diesem versuch komplett nur mit den first/last gearbeitet, da bei ersten versuchen mit der positionsnummer nur noch falscheres bei mir raus kam - vill. kann mir ja jemand die augen öffnen oder weiss nen brauchbaren link/tipp für mich (hab leider selber keinen gefunden).