[PHP] Sitz da und komm nicht mehr weiter

nischtak

Banned
Registriert
Nov. 2005
Beiträge
692
Also folgendes, ich hab ein Baromter gezeichnet in PHP der funkionier einwandfrei.
Angezeigt wird die Windgeschwindigkeit überm Meer in m/s das tut auch soweit sogut!
unten soll jetzt angezeigt werden wie schnell die windgeschwindigkeit ist das tut auch
so jetzt das problem

weiter unten soll dann die Beaufort geschindigkeit angezeigt werden die errechnet sich aus dem windgeschwindigkeit m/s.

O beaufort > 0,0 - 0.5 m/s
1 beaufort > 0,5 - 2.1 m/s
2 beaufort > 2.1 -3.6 m/s

die m/s werden aus der datenbank gelesen
so welche schleife oder if-bedingung oder sonst was sol ich am besten verweden
ach ja die 4beautfort auf dem bild sind erstmal hardcodiert
 

Anhänge

  • 1702e666d6e5ccb9e0ceb15067d1ea1b.png
    1702e666d6e5ccb9e0ceb15067d1ea1b.png
    8,7 KB · Aufrufe: 181
hätte vielleicht erwähnen sollen das ich diese lösung auch schon hatte, ist aber zu ungenau....
ich hab hier die liste 100%richtigen date

würde es mit einer schleife funktionieren? ich sitz seit gestern mittag da und komm nicht weiter

oder wir kann man diese if bedinungen in eine schreiben oder kürzen damit ich nicht 30 bedinungen habe

PHP:
if($value >= 0 && $value <= 0.2)
    {
    $beauf = '0';
    }
    else
    {
    $beauf =false;
    }
if($value >= 0.3 && $value <= 1.5)
    {
    $beauf = '1';
    }
    else
    {
    $beauf =false;
    }
if($value >= 1.6 && $value <= 3.3)
    {
    $beauf = '3';
    }
    else
    {
    $beauf =false;;
    }

und soweiter und soweiter...

thread kann geschlossen werden bin fertig trotzdem danke :D
 
Zuletzt bearbeitet von einem Moderator: (Vierfachpost zusammengeführt)
Hallo nischtak,
erstens würde ich dich bitte Mehrfachposts zu vermeiden. Du kannst deine eigenen Posts auch nach dem Absenden noch ändern, indem du auf den kleinen "Ändern" Button unten rechts klickst.

Zweitens möcte ich dir unsere Regelwerk allgemein ans Herz legen, dort ist u.A. nachzulesen, daß man den Helfenden mitteilen sollte, was man selber schon versucht und ausprobiert hat.

Drittens wäre es ganz zauberhaft, wenn du die Lösung hier auch posten würdest. So können vielleicht viele andere User davon profitieren, die das gleiche oder ein ähnliches Problem haben.

Viertens werden nicht alls Threads geschlossen, die eine Lösung enthalten. Oft tauchen noch Fragen auf (siehe Punkt drei) oder es gibt andere Lösungsansätze.
 
Hi nischtak,

das hier sollte eigentlich den gleichen Effekt erzielen.

PHP:
switch ($value) {
	case ($value >= 0 && $value <= 0.2):
		$beauf = '0';
		break;
	case ($value >= 0.3 && $value <= 1.5):
		$beauf = '1';
		break;
	case ($value >= 1.6 && $value <= 3.3):
		$beauf = '3';
		break;
	default:
		$beauf = false;
		break;
}


Ciao
 
Zuletzt bearbeitet:
entschuldige mich erstens für mein fehlverhalten... S.GINY bist echt ein schatz dank...aber meine lösung ist etwas kürzer aber ist vom sinn die gleiche

PHP:
  if($value <= 0.5){
     $beaufort = '0';
    }
    elseif ($value <= 2.1){
     $beaufort = '1';
    }
    elseif ($value <= 3.6){
      $beaufort = '2';
    }
    elseif ($value <= 5.7){
     $beaufort = '3';
    }
    elseif ($value <= 8.2){
     $beaufort = '4';
    }
    elseif ($value <= 8.2){
     $beaufort = '4';
    }
    elseif ($value <= 11.3){
     $beaufort = '5';
    }
    elseif ($value <= 14.4){
     $beaufort = '6';
    }
    elseif ($value <= 17.5){
     $beaufort = '7';
    }
    elseif ($value <= 21.1){
     $beaufort = '8';
    } 
    elseif ($value <= 24.7){
     $beaufort = '9';
    }
    elseif ($value <= 28.8){
     $beaufort = '10';
    }
    elseif ($value <= 32.9){
     $beaufort = '11';
    }
    elseif ($value >= 32.9){
     $beaufort = '12';
    }
   else{
   $beaufort =False;
   }
 
Zuletzt bearbeitet:
Kürzer? Die Lösung von S.Giny ist viel kürzer und zudem viel eleganter! Bzw. ich würde an deiner Stelle lieber switch nehmen statt der ewig langen elseif Verschachtelung.
 
So nischtak,

hast ja mal wieder die Hälfte unterschlagen was? Also zunächst als Info für Dich. Eine switch Anweisung ist einem mehrstufigen If - Else Gebilde immer vorzuziehen, da es schneller arbeitet. Ich habe mich nochmal Deines Problems angenommen und das hier dürfte die wohl so ziemlich eleganteste (und auch schnellste) Methode darstellen:

PHP:
$beaufort = false;
$werte = array (0.5, 2.1, 3.6, 5.7, 8.2, 11.3, 14.4, 17.5, 21.1, 24.7, 28.8, 32.9);

foreach(array_keys($werte) as $key) {
	$maxWert = &$werte[$key];
	if ($key == 0) {
		if ($value <= $maxWert) {
			$beaufort = $key;
			break;
		}
	}
	else {
		$minWert = &$werte[($key - 1)];
		if (($minWert < $value) && ($value <= $maxWert)) {
			$beaufort = $key;
			break;	
		}
	}
}
$beaufort = ($beaufort !== false) ? $beaufort : 12;


Ciao
 
Zuletzt bearbeitet:
Zurück
Oben