Verschachtelte Schleife
Oli200 02.06.2003 - 23:00 1063 19
atrox
in fairy dust... I trust!
|
na leider nicht - wollte nur den blick über den tellerrand erleichtern. einfach weil mysql zwar überrall gerne verwewndet wird, aber einige gehörige defizite aufweist. - aber du hast schon recht - das machen wir bei gelenheit in einem eigenen thread.
|
kleinerChemiker
Here to stay
|
ich hab unlängst so ein menü gemacht. in mysql hab ich für das menü nur einen table. id, link, text, subs der code funzt, allerdings weiß ich nciht, wie gut er ist *ggg* ######################
## Aufbau des Menüs ##
######################
## Menü aus DB holen ##
$query = 'SELECT m.menu_id, m.text, m.seiten_id, m.subs, g.farbe
FROM menu AS m LEFT JOIN gruppen AS g USING (gruppen_id) ORDER BY m.text ASC';
$result = mysql_query ($query) OR die (mysql_errno () . ': ' . mysql_error ());
while ($zeile = mysql_fetch_assoc ($result)) {
$menu[] = $zeile;
}
## Submenüs extrahieren, aus restlichem Menü löschen und Menü neu anordnen ##
## <Title>-Wert der Seite extrahieren ##
## Index-Link aus Menü entfernen ##
for ($i = 0; $i < count ($menu); $i++) {
if ($menu[$i][seiten_id] == $seite) {
$title_text = $menu[$i][text];
}
if ($menu[$i][subs] != '') {
$temp1 = explode ("|", $menu[$i][subs]);
for ($j = 0; $j < count ($temp1); $j++) {
if ($temp1[$j] != '') {
$subs_row[] = $temp1[$j];
}
}
}
if ($menu[$i][seiten_id] == FIRSTMAINPAGE) {
unset ($menu[$i]);
}
}
$subs_row = array_unique ($subs_row);
sort ($subs_row);
for ($i = 0; $i < count ($menu); $i++) {
for ($j = 0; $j < count ($subs_row); $j++) {
if ($menu[$i][menu_id] == $subs_row[$j]) {
$subs[$menu[$i][menu_id]] = $menu[$i];
unset ($menu[$i]);
}
}
}
unset ($temp1);
while (count ($menu) > 0) {
$temp1[] = array_shift ($menu);
}
$menu = $temp1;
unset ($temp1);
## Menü aufbauen ##
$menu_text = '';
for ($i = 0; $i < count ($menu); $i ++) {
$menu_text .= '<li><a href="' . $PHP_SELF . '?seite=' . $menu[$i][seiten_id] . '"><font color="#' .
$menu[$i][farbe] . '">' . $menu[$i][text] . '</font></a></li>' . "\n";
if ($menu[$i][subs] != '') {
$menu_text .= "<ul>\n";
$temp1 = explode ("|", $menu[$i][subs]);
for ($j = 0; $j < count ($temp1); $j++) {
$menu_text .= '<li><a href="' . $PHP_SELF . '?seite=' . $subs[$temp1[$j]][seiten_id] . '"><font color="#' .
$subs[$temp1[$j]][farbe] . '">' . $subs[$temp1[$j]][text] . '</font></a></li>' . "\n";
unset ($temp1);
}
$menu_text .= "</ul>\n";
}
}
MIK p.s.: über verbesserungs- und optimierungsvorschläge hätte ich ncihts einzuwenden edit: damit läßt sich nur eine ebene tief gehen. ich brauch eigentlich nicht mehr. werd aber vermutlich, wenn ich wieder zeit habe, es so umschreiben, daß man beliebig tief gehen kann.
Bearbeitet von atrox am 04.06.2003, 01:19
|
watchout
Legendundead
|
[...] raus mit dem "kot"! und ausserdem is eine ebene sinnlos, wenn dann gscheit! @oli: im prinzip is dein problem mit einer einzigen rekursiven funktion lösbar ich hab des schon öfters gebraucht - die arbeit tät ich auf jeden fall php überlassen, dh. alle daten in ein array und das dann durchhackln
|
atrox
in fairy dust... I trust!
|
<moderate> schön sprechen </moderate>
|
watchout
Legendundead
|
<moderate> schön sprechen </moderate> got wortspiel : ausserdem, bitte sei so nett und <moderate> seinen "code" ( ) mal bissal schmäler...
|