Größer, kleiner, gleich

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Größer, kleiner, gleich

Beitrag von Dungeonwatcher »

'n Abend! :cool:

Wo ist mein Denkfehler?

Ich möchte im Vault Mod anzeigen lassen ob der aktuelle Preis ggü. dem vorherigen gestiegen, gefallen oder gleich geblieben ist. Dazu habe ich folgenden Code eingebaut:

Code: Alles auswählen

		if ( $exchange[$i]['stock_price'] > $exchange[$i]['stock_previous_price'] )
		{
			$stock_amount_stat = $lang['Vault_exchange_actions_amount_0'];
		}
		else if ( $exchange[$i]['stock_price'] = $exchange[$i]['stock_previous_price'] )
		{
			$stock_amount_stat = $lang['Vault_exchange_actions_amount_1'];
		}
		else if ( $exchange[$i]['stock_price'] < $exchange[$i]['stock_previous_price'] )
		{
			$stock_amount_stat = $lang['Vault_exchange_actions_amount_2'];
		}
Hierbei ist $exchange[$i]['stock_price'] der aktuelle und $exchange[$i]['stock_previous_price'] der vorherige Preis. Auslesen tue ich das ganze dann so:

Code: Alles auswählen

"STOCK_AMOUNT_STAT" => $stock_amount_stat,
Allerdings funktioniert dies nicht korrekt. Der Bereich größer wird korrekt angezeigt, alles andere jedoch nicht?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Lass mal die "else" weg, dann sollte es besser klappen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

Hmm, ohne die else meckert PHP rum. Aber nach einigen Stunden Schlaf fiel mir nun folgende Lösung ein:

Code: Alles auswählen

		if ( $exchange[$i]['stock_price'] > $exchange[$i]['stock_previous_price'] )
		{
			$stock_amount_stat = $lang['Vault_exchange_actions_amount_0'];
		}
		else if ( $exchange[$i]['stock_price'] < $exchange[$i]['stock_previous_price'] )
		{
			$stock_amount_stat = $lang['Vault_exchange_actions_amount_2'];
		}
		else
		{
			$stock_amount_stat = $lang['Vault_exchange_actions_amount_1'];
		}
Damit wird alles korrekt angezeigt. Nur warum ich die dritte Bedingung als else und nicht als else if angeben muss ist mir unklar. ^6

Bye
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Nun ja, getreu dem Motto:

Code: Alles auswählen

if ...
else if...
else
Eben rein logisch übersetzt:
Wenn...
Ansonsten wenn...
andernfalls...
Eigentlich kann beim letzten else auch ein if rein, wäre aber in diesem Fall logisch blödsinnig zu formulieren. Daher eben nur ein else ohne Bedingungen, damit es die allerletzte Ausnahme in der Bedingungskette darstellt.

Ich gebe zu, etwas schwer zu verstehen, aber eben rein logisch aufgebaut.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi! :cool:

[quote="oxpus";p="87979"]Ich gebe zu, etwas schwer zu verstehen, aber eben rein logisch aufgebaut.[/quote]

THNX

Ich denke es kurzfristig kapiert zu haben. Mal schauen wie lange kurzfristig bei mir ist... :)

Bye
Benutzeravatar
cback
Beiträge: 1391
Registriert: Sa 15.Mai, 2004 15:32
Wohnort: Saarland
Kontaktdaten:

Beitrag von cback »

Jungs ihr macht alle nen Denkfehler. Das Problem liegt nämlich in der Abfrage selbst. Diese umstellen ist also nicht wirklich die Lösung des Problems, nur eine unschöne Lösung. Der obige Code würde so funktionieren wenn man in der Bedingung alles korrekt macht:

Code: Alles auswählen

else if ( $exchange[$i]['stock_price'] = $exchange[$i]['stock_previous_price'] ) 

das = müsste korrekt == lauten in dieser Zeile. Ansonsten wird der Wert von stock_previous_price bei dem else if dem stock_price zugewiesen, die Funktion liefert "true" zurück und dieses Ergebnis ist folglich dann immer das was angezeigt wird wenn das erste nicht zutrifft.


Korrigiert wäre es also:

Code: Alles auswählen

else if ( $exchange[$i]['stock_price'] == $exchange[$i]['stock_previous_price'] ) 


An der Pörse ist das nicht anders
Pis morgen! :D


Greetz
der wandelnde PHP-Interpreter ;)



PS:

bedingungen nach dem schema

Code: Alles auswählen

if
...
else if
...
else if
...

funktionieren auch. Das else ist nicht zwingend erforderlich. Doch muss man hier an eine Fallback lösung denken wenn einer der genannten fälle nicht eintritt wird nämlich nicht auf einen Standardfall zurückgegriffen. Nur das macht das else. mit else if folgt noch eine Bedingung. Hier ist also die KLammer mit der bedingung erforderlich. Also

else if
{
...
}


funktioniert nicht als abschluss (da muss else hin)


else if ( $bla == $blubb )
{
...
}


funktioniert schon weil eben in der Klammer noch eine Bedingung vorhanden ist (das if also rechtfertigt)



Und immer dran denken

= ist eine Zuweisung
== ist ein Vergleich

ein $bla = $blubb in einer condition liefert immer TRUE zurück wenn die Zuweisung geklappt hat. Folgich wäre ein else if ( $blubb = $bla ) immer das Ergebnis der Prüfung. (Else in dem Fall nicht zu nutzen falls es an erster Stelle steht).
Zuletzt geändert von cback am So 14.Dez, 2008 19:07, insgesamt 4-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

:wall:
Klar, MAN, die Operatoren!
:wall:
Danke für den Wink mit dem gesamten Zaun :!:
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
cback
Beiträge: 1391
Registriert: Sa 15.Mai, 2004 15:32
Wohnort: Saarland
Kontaktdaten:

Beitrag von cback »

Kein Problem :mrgreen:
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

[quote="cback";p="87981"]das = müsste korrekt == lauten in dieser Zeile. Ansonsten wird der Wert von stock_previous_price bei dem else if dem stock_price zugewiesen, die Funktion liefert "true" zurück und dieses Ergebnis ist folglich dann immer das was angezeigt wird wenn das erste nicht zutrifft.[/quote]

Aaaja, das erklärt das seltsame Ergebnis was ich erhielt.
bedingungen nach dem schema

Code: Alles auswählen

if
...
else if
...
else if
...

funktionieren auch. Das else ist nicht zwingend erforderlich. Doch muss man hier an eine Fallback lösung denken wenn einer der genannten fälle nicht eintritt wird nämlich nicht auf einen Standardfall zurückgegriffen. Nur das macht das else.
Genau deswegen hatte meine zweite Variante auch funktioniert. Ich hab's geändert. THNX

Bye
Antworten