wo soll der rekursive aufruf von output() hin? er fehlt noch. schau noch mal in den pseudocode.
Entwicklung einer Downloaddatenbank, Probleme mit Kategorien
Einklappen
X
-
Also kommt er doch nochmal in die while-Schleife, oder was? Ich bin völlig verwirrt.
Du hast in wie schon erwähnt zweimal. einmal als Initial-Aufruf, der ja nun außerhalb der while-Schleife mit den Werten $cat_arr,0,3 aufgerufen wird.
Jetzt muss er nochmal in die while-Schleife mit den Werten $cat_arr,$pid,3, oder wie? Warum nochmal $tiefe+1?
Kommentar
-
Ich verstehs immer noch nicht. Dein Pseydo-Code sieht doch folgendermaßen aus:
Code:void output(array baum, int pid, int tiefe) { für jeden knoten aus dem baum mit pid wiederhole { print "tiefe"-mal leereichen zum einrücken print knoten_name output(baum, knoten_id, tiefe+1) } } //Initial-Aufruf output(baum, 0, 0)
- Für die Zeile "für jeden knoten aus dem Baum" habe ich doch die foreach-Schleife gebaut.
- Das "print "tiefe"-mal..." ist die for-Schleife.
- "print knoten_name" ist doch "print $value["kategorie"].'<br>';"
- Ja, und dann hast Du noch "output(baum, knoten_id, tiefe+1)" aber innerhalb der foreach-Schleife.
Lös es doch bitte auf. Kann vorher wahrscheinlich nicht schlafen.
Kommentar
-
so?
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$id = $row["id"];
$pid = $row["pid"];
$kategorie = $row["kategorie"];
$cat_arr[$arr_count] = array();
$cat_arr[$arr_count]['id'] = $id;
$cat_arr[$arr_count]['pid'] = $pid;
$cat_arr[$arr_count]['kategorie'] = $kategorie;
$arr_count = $arr_count + 1;
output($cat_arr,$arr_count,$tiefe+1);
}
output($cat_arr,0,0);
Kommentar
-
Ja, so durch den Wind bin ich schon. Ja, nicht in die while-Schleife. Okay. Es sieht nun folgendermaßen aus:
PHP-Code:$arr_count = 0;
$cat_arr = array();
$sql = "SELECT * FROM kategorien ORDER BY id, pid;";
$result = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$id = $row["id"];
$pid = $row["pid"];
$kategorie = $row["kategorie"];
$cat_arr[$arr_count] = array();
$cat_arr[$arr_count]['id'] = $id;
$cat_arr[$arr_count]['pid'] = $pid;
$cat_arr[$arr_count]['kategorie'] = $kategorie;
$arr_count = $arr_count + 1;
}
output($cat_arr,0,0);
}
function output($cat_arr, $id, $tiefe)
{
foreach ($cat_arr as $value)
{
if ($value["pid"] == $pid)
{
for ($leer = 1; $leer <= $tiefe; $leer++)
{
print " ";
}
print $value["kategorie"].'<br>';
}
}
output($cat_arr,$id,$tiefe+1);
}
Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) [2] => Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) [2] => Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) [3] => Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) [2] => Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) [3] => Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) [4] => Array ( [id] => 5 [pid] => 3 [kategorie] => Microsoft ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) [2] => Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) [3] => Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) [4] => Array ( [id] => 5 [pid] => 3 [kategorie] => Microsoft ) [5] => Array ( [id] => 6 [pid] => 2 [kategorie] => PDF ) ) STAMM
Ich weiß, ich habe deine Nerven sehr stark strapaziert. Dafür schon mal danke. Was ist jetzt noch falsch?
Kommentar
Kommentar