While-Schleife - Daten vergleichen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
SKYSURFER2002
Mitglied
Beiträge: 138
Registriert: 23.01.2005 16:09
Kontaktdaten:

While-Schleife - Daten vergleichen

Beitrag von SKYSURFER2002 »

Hallo,

ich habe ein kleines Problem mit einer while-Schleife. Ich möchte eine Variable mit einer aus dem letzten durchlauf vergleichen. Mein Problem ist nicht das vergleichen, sondern wie ich die Variable vom letzten Durchlauf beim jetzigen Durchlauf zur Verfügung habe. Ist das überhaupt möglich???


SKYSURFER
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Übergeb die aktuelle variable doch einfach an eine andere.

$letzte = $aktuelle;

Die hast du beim nächsten durchlauf immernoch mit den alten werten.

Olli
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Wo ist das Problem?
Eine while Schleife ändert von sich aus ja keine Variablen. Außerdem kannst du die Variable doch einfach kurz zwischenspeichern.
Beispiel:

Code: Alles auswählen

$var = 0;
while($var < 40)
{
$var_alt = $var;
$var++;
if($var_alt % 2 == $var % 3)
{
echo  "\n<br>x = $var<br>x-1 = $var_alt <br><br> Es gilt: Der Rest der Division (x-1)/2 ist gleich dem Rest der Division x/3";
}
}
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
SKYSURFER2002
Mitglied
Beiträge: 138
Registriert: 23.01.2005 16:09
Kontaktdaten:

Beitrag von SKYSURFER2002 »

das ist ne idee. hätte nicht gedacht, dass das so einfach ist.
Werde es gleich mal testen.
Danke


SKYSURFER
SKYSURFER2002
Mitglied
Beiträge: 138
Registriert: 23.01.2005 16:09
Kontaktdaten:

Beitrag von SKYSURFER2002 »

Hallo,

leider klappt das noch nicht so wie ich mir das vorgestellt hatte. Hier mal mein quellcode:

Code: Alles auswählen

...
$abfrage = "SELECT * FROM $tabelle_kat ORDER BY sortierung ASC";
	$ergebnis = mysql_query($abfrage);
	
	$datumjetzt = time();
	$jahralt = strftime("Y",$datumjetzt);
	$num = 1;
	while($row = mysql_fetch_object($ergebnis))
    	{
    		$id = $row->id;
    		$titel = $row->titel;
    		$datum = $row->datum;
    		$datum_format = "%d.%m.%Y";
     		$datum1 = strftime($datum_format,$datum);

	    	$sortierung = $row->sortierung;
    		$link = append_sid("bilder.$phpEx?action=gal&id=$row->id");
			$jahreszahl = "%Y";
			$jahrneu = strftime($jahreszahl,$datum);
			
			if( $num == 1)
			{
				$template->assign_block_vars('JAHR', array(
				'JAHR' => $jahrneu,
				));
			
				$template->assign_block_vars('KAT', array(
				'NUM' => $NUM,
				'TITEL' => $titel,
				'DATUM' => $datum1,
				'SORTIERUNG' => $sortierung,
				'U_LINK' => $link,
				'monat' => $monat,
				));
			}
			else
			{
				if ( $jahrneu == $jahralt)
				{
					$template->assign_block_vars('KAT', array(
					'NUM' => $NUM,
					'TITEL' => $titel,
					'DATUM' => $datum1,
					'SORTIERUNG' => $sortierung,
					'U_LINK' => $link,
					'monat' => $monat,
					));
				}
				else
				{
					$template->assign_block_vars('JAHR', array(
					'JAHR' => $jahrneu,
					));
			
					$template->assign_block_vars('KAT', array(
					'NUM' => $NUM,
					'TITEL' => $titel,
					'DATUM' => $datum1,
					'SORTIERUNG' => $sortierung,
					'U_LINK' => $link,
					'monat' => $monat,
					));
				}
			}
			$num++;
			$jahralt = $jahrneu;	
			
    	}//ende while
...
Template

Code: Alles auswählen

...
	<table width="370" cellpadding="0" cellspacing="0" border="1">
	<!-- BEGIN JAHR -->
	<tr>
	<td class="text" height="28" colspan="4">{JAHR.JAHR}</td>
	</tr>
	<!-- END JAHR -->
	<!-- BEGIN KAT -->
	<tr> 
	<td class="text" height="28">{KAT.NUM}</td>
	<td class="text" height="28"><a href="{KAT.U_LINK}">{KAT.TITEL}</a></td>
	<td class="text" height="28">{KAT.SORTIERUNG}</td>
	<td class="text" height="28">{KAT.DATUM}</td>
	</tr>
	<!-- END KAT -->
	</table>
...
Bei der Ausgabe bekomme ich dann ein falsches Ergebnis.
Es ist so gedacht, dass alle Kategorien unter dem Dazugehörigen Jahr angezeigt werden. Also so:
2006
1
2
3
4
2005
5
6
7
...

aber bei mir wird das Ganze so angezeigt:
2006
2005
1
2
3
4
5
...

Warum???


SKYSURFER
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Um das zu machen musst du die Blöcke verschachteln.
Du kannst dir jeden Block vorstellen wie eine Schleife. Die wird dann so lange durchlaufen wie es noch Daten gibt die dazu gehören. 2005 und 2006 gehören zur Schleife "Jahr", die restlichen aber zur Schleife "kat". Da du beide Schleifen hintereinander aufführst werden erst die Daten von Jahr und dann die von Kat ausgegeben.
Eine korrekte Verschachtelung sähe so aus:

Code: Alles auswählen

Template:
<!-- BEGIN jahr -->
{jahr.JAHR}
<!-- BEGIN jahr.kat -->
{jahr.kat.ERSTE_VARIABLE}
{jahr.kat.ZWEITE_VARIABLE}
<!-- END jahr.kat -->
<!-- END jahr -->
Die Zuweisungen im PHP müssen dann so aussehen:

Code: Alles auswählen

$template->assign_block_vars('jahr',array(...));
$template->assign_block_vars('jahr.kat',array(...));
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
SKYSURFER2002
Mitglied
Beiträge: 138
Registriert: 23.01.2005 16:09
Kontaktdaten:

Beitrag von SKYSURFER2002 »

alles klar. habs hinbekommen.

Danke

SKYSURFER
Antworten

Zurück zu „Coding & Technik“