"We are back" « oc.at

Verschachtelte Schleife

Oli200 02.06.2003 - 23:00 1063 19
Posts

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4295
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*

Code: PHP
######################
## 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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von kleinerChemiker
[...]
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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
<moderate>
schön sprechen
</moderate>

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von atrox
<moderate>
schön sprechen
</moderate>
got wortspiel :rolleyes::

ausserdem, bitte sei so nett und <moderate> seinen "code" (:( ) mal bissal schmäler...
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz