Verschachtelte Schleife - Seite 2

Seite 2 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/verschachtelte_schleife_80911/page_2 - zur Vollversion wechseln!


atrox schrieb am 03.06.2003 um 10:58

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 schrieb am 03.06.2003 um 13:45

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.


watchout schrieb am 03.06.2003 um 14:27

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 schrieb am 03.06.2003 um 14:31

<moderate>
schön sprechen
</moderate>


watchout schrieb am 03.06.2003 um 23:48

Zitat von atrox
<moderate>
schön sprechen
</moderate>
got wortspiel :rolleyes::

ausserdem, bitte sei so nett und <moderate> seinen "code" (:( ) mal bissal schmäler...




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026