komplexe if anweisung
michl
- php
Hallo,
ich stehe da vor ein Problem und komme nicht weiter.
Ich möchte mir ausrechenen lassen welcher E-Motor am besten geeignet ist.
Dazu habe ich 2 Werte und 5 Motoren.
Motor 1= 50PS und max 400 Umdrehungen
Motor 2= 100PS und max 660 Umdrehungen
Motor 3= 150PS und max 660 Umdrehungen
Motor 4= 200PS und max 660 Umdrehungen
Motor 5= 250PS und max 660 Umdrehungen
Die 2 Werte lasse ich mir von einem Script berechenen. $rest (PS) und $rest1 (Undrehungen). Ich setzte jetzt einfach mal einen wirkürlichen wert.
$rest = 140;
$rest1 = 560;
So, Nun habe ich für rest eine Vorgabe
$a = 50;
$b = 100;
$c = 150;
$d = 200;
$e = 250;
$a1 = 400;
$b1 = 660;
$c1 = 660;
$d1 = 660;
$e1 = 660;
so, nun soll das Script sich den besten Motor aussuchen und immer die nächst beste Kategorie wählen.
Also rest 140 und rest1 560
rest liegt zwischen b und c also nehmen wir den nächst höheren also c. dann soll eine Ausgabe erfolgen mit der Meldung Motor 3 ist am besten geeignet.
Wie macht man das am besten?
Grüße,
über eine switch() abfrage.
brauchst du ausfürhlcihere anweisung oder hast du soviel willenskraft "php switch() tutorial" zu googlen ?
MFG
bleicher
Hello,
über eine switch() abfrage.
brauchst du ausfürhlcihere anweisung oder hast du soviel willenskraft "php switch() tutorial" zu googlen ?
Warum so unhöflich?
Du hättest, was von netten Stammpostern eigentlich erwartet wird, zumindest einen Link setzen können
http://de3.php.net/manual/en/control-structures.switch.php
Ein harzliches Glückauf
Tom vom Berg
Hallo Tom,
eine Antwort um 6:05?
Bist Du einfach nur ein Frühaufsteher oder Nieschläfer?
Am Ende wohnst Du gar hier?
off:PP
Hello,
Am Ende wohnst Du gar hier?
Ich wohne direkt im Server. Da habe ich es nicht so weit :-)
Ein harzliches Glückauf
Tom vom Berg
Huhu,
Ich wohne direkt im Server. Da habe ich es nicht so weit :-)
btw: Hat irgendwer ein Trägermedium, dass so rein zufällig Tron beheimatet?
Gruß aus Berlin!
eddi
$rest = 140;
$a = 50;
$b = 100;
$c = 150;
$d = 200;
$e = 250;
Wie macht man das am besten?
vermutlich suchst du eine switch-anweisung - die ist für dein vorhaben besser geeignet als eine eine reihe ifs
switch(true) {
case $rest <= $a:
$wert = $a;
break;
case $rest <= $b:
$wert = $b;
break;
case $rest <= $c:
$wert = $c;
break;
case $rest <= $d:
$wert = $d;
break;
default
$wert = $e;
}
obriges beispiel ist nicht getestet, sollte aber die erste hälfte deines wunsches erfüllen - das entspricht mit breaks einer if/else-if/else-verzweigung - wenn man die breaks (teilweise) weglässt lassen sich auch zb aufeinanderfolgende einzelne ifs mit weniger code realisieren
Grüße,
ohne break; s ;| ?
MFG
bleicher
Hi michl!
Wie macht man das am besten?
Man kann das neben einer switch Anweisung auch mit einer while-Schleife machen.
// Alle PS-Werte
$ps = array(50, 100, 150, 200, 250);
// Alle UPM-Werte
$umdrehungen = array(400, 660, 660, 660, 660);
// Berechnete Werte für PS und Umdrehungen
$rest = 154;
$rest1 = 534;
// Berechnung der oberen Grenzen
$i = 0;
while($rest > $ps[$i])
$i++;
$rest = $ps[$i];
$i = 0;
while($rest1 > $umdrehungen[$i])
$i++;
$rest1 = $umdrehungen[$i];
Der Vorteil ist die Möglichkeit der einfachen Erweiterung. Möchtest du die PS- oder UPM-Werte ändern, brauchst du nur das entsprechende Array korrigieren.
MfG H☼psel
Hi michl!
Wie macht man das am besten?
Man kann das neben einer switch Anweisung auch mit einer while-Schleife machen.
// Alle PS-Werte
$ps = array(50, 100, 150, 200, 250);
// Alle UPM-Werte
$umdrehungen = array(400, 660, 660, 660, 660);// Berechnete Werte für PS und Umdrehungen
$rest = 154;
$rest1 = 534;// Berechnung der oberen Grenzen
$i = 0;
while($rest > $ps[$i])
$i++;
$rest = $ps[$i];$i = 0;
while($rest1 > $umdrehungen[$i])
$i++;
$rest1 = $umdrehungen[$i];
>
> Der Vorteil ist die Möglichkeit der einfachen Erweiterung. Möchtest du die PS- oder UPM-Werte ändern, brauchst du nur das entsprechende Array korrigieren.
>
> MfG H☼psel
Soweit so gut...
Aber ganz verstehe ich das noch nicht. Wie komme ich von der Schleife auf die Motoren? Als Ausgabe Motor 1 ist am besten geeignet.
Hi michl!
Aber ganz verstehe ich das noch nicht. Wie komme ich von der Schleife auf die Motoren?
Das kommt darauf an, wovon du das abhängig machst.
1. Möglichkeit: $rest > $ps[$i] und $rest1 > $umdrehungen[$i]
2. Möglichkeit: $rest > $ps[$i]
3. Möglichkeit: $rest1 > $umdrehungen[$i]
Für die erste Möglichkeit (ich nehme mal an, das ist es, was du möchtest) muss der Code noch verändert werden:
// Alle PS-Werte
$ps = array(50, 100, 150, 200, 250);
// Alle UPM-Werte
$umdrehungen = array(400, 660, 660, 660, 660);
// Berechnete Werte für PS und Umdrehungen
$rest = 154;
$rest1 = 534;
// Berechnung der oberen Grenzen
$i = 0;
while(($rest > $ps[$i]) OR ($rest1 > $umdrehungen[$i]))
$i++;
$rest = $ps[$i];
$rest1 = $umdrehungen[$i];
// $i (angefangen bei 0) enthält jetzt die Position des Motors, der gebraucht wird
echo 'Motor '.($i+1).' ist am besten geeignet. ('.$rest.' PS und '.$rest1.' Umdrehungen)';
// Ausgabe: Motor 4 ist am besten geeignet. (200 PS und 660 Umdrehungen)
MfG H☼psel
Hallo,
danke, jetzt geht es. Eine Frage noch. Wie setzte ich eine Meldung rein, wenn die Leistung zuviel ist, dass es keinen passenden Motor gibt?
Hi michl!
Wie setzte ich eine Meldung rein, wenn die Leistung zuviel ist, dass es keinen passenden Motor gibt?
if ($i > count($ps)) {
// Kein Motor verfügbar
}
MfG H☼psel