Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Hilfe bei if/else Struktur (https://boardunity.de/hilfe-if-else-struktur-t2665.html)

MrNase 22.12.2004 13:54

Hilfe bei if/else Struktur
 
Hallo,

Folgende Funktion:
Code:

  function get_html4temp($temp)
  {
          // Temperaturen: 50 bis -50
         
          $temp = str_replace('-',1,$temp);
         
          if($temp <= 50) {
          $bla = '#0000FF';
          } 
          elseif($temp <= 40) {
          $bla = '#1900E5';
          } 
          elseif($temp <= 30) {
          $bla = '#3300CC';
          } 
          elseif($temp <= 20) {
          $bla = '#4C00B2';
          } 
          elseif($temp <= 10) {
          $bla = '#660099';
          } 
          elseif($temp <= 0) {
          $bla = '#7F007F';
          } 
          elseif($temp <= 110) {
          $bla = '#990066';
          } 
          elseif($temp <= 120) {
          $bla = '#B2004C';
          } 
          elseif($temp <= 130) {
          $bla = '#CC0033';
          } 
          elseif($temp <= 140) {
          $bla = '#E50019';
          } 
          elseif($temp <= 150) {
          $bla = '#FF0000';
          } 
                   
          else {
          $bla = '#000000';
          }
         
          return $bla;
  }

Folgende Funktionsweise:
Für jede Temperatur soll der entsprechende HTML-Code wiedergeben werden. Wenn die Temperatur kleiner als 40 (Grad) ist soll halt der Farbcode '#1900E5' ausgeben werden.

Folgende Denkschritte:

$temp ist ne Zahl.. Von 50 bis -50 ist alles dabei. Das Minuszeichen wird mit einer 1 ersetzt da ich <= mit nur mir positiven Zahlen ans Laufen bekomme.

Das Problem:
Es wird immer nur der HTML-Code für <= 150 ausgeben..



Nach ein bissl rumtesten.

Die Lösung:
Code:

function get_html4temp($temp)
 {
        // Temperaturen: 50 bis -50
       
 
        if($temp <= 50 AND $temp > 40) {
        $bla = '#FF0000';
        } 
        elseif($temp <= 40 AND $temp > 30) {
        $bla = '#E50019';
        } 
        elseif($temp <= 30 AND $temp > 20) {
        $bla = '#CC0033';
        } 
        elseif($temp <= 20 AND $temp > 10) {
        $bla = '#B2004C';
        } 
        elseif($temp <= 10 AND $temp > 0) {
        $bla = '#990066';
        } 
        elseif($temp <= 0 AND $temp > -10) {
        $bla = '#7F007F';
        } 
        elseif($temp <= -10 AND $temp > -20) {
        $bla = '#660099';
        } 
        elseif($temp <= -20 AND $temp > -30) {
        $bla = '#4C00B2';
        } 
        elseif($temp <= -30 AND $temp > -40) {
        $bla = '#3300CC';
        } 
        elseif($temp <= -40 AND $temp > -50) {
        $bla = '#1900E5';
        } 
        elseif($temp <= -50 AND $temp > -60) {
        $bla = '#0000FF';
        } 
                 
        else {
        $bla = '#000000';
        }
       
        return $bla;
 }

;)

Michael Przybyla 22.12.2004 14:14

Hi Nase,

kann ich nicht bestätigen, allerdings bekomme ich falsche Werte.
Das liegt daran, dass du ne falsche Reihenfolge hast.

PHP-Code:


 
function get_html4temp($temp)
  {
      
// Temperaturen: 50 bis -50
      
      
if($temp <= -10) {
      
$bla '#990066';
      }  
      elseif(
$temp <= -20) {
      
$bla '#B2004C';
      }  
      elseif(
$temp <= -30) {
      
$bla '#CC0033';
      }  
      elseif(
$temp <= -40) {
      
$bla '#E50019';
      }  
      elseif(
$temp <= -50) {
      
$bla '#FF0000';
      }          
      elseif(
$temp <= 0) {
      
$bla '#7F007F';
      } 
       
      elseif(
$temp <= 10) {
      
$bla '#660099';
      } 
    
      elseif(
$temp <= 20) {
      
$bla '#4C00B2';
      }  
   
      elseif(
$temp <= 30) {
      
$bla '#3300CC';
      }    
      elseif(
$temp <= 40) {
      
$bla '#1900E5';
      }      elseif(
$temp <= 50) {
      
$bla '#0000FF';
      }  
       
      else {
      
$bla '#000000';
      }
      
      return 
$bla;
  } 

Klar wieso? Denn die Zahl 10 ist immer kleiner als 50 somit sucht er ja nicht weiter sondern gibt dir das Ergebnis für <= 50.

Fabchan 22.12.2004 14:45

Hi Nase!

Hab dir mal ne Funktion geschrieben, die ihren Dienst ebenso tun sollte.

PHP-Code:

// Array mit den Farbnamen
// Wichtig ist hierbei, dass die Zahlen nach der Größe Sortiert angegeben werden
$_TEMPCOLORS = array(
    -
50 => '#0000FF',
    -
40 => '#1900E5',
    -
30 => '#3300CC',
    -
20 => '#4C00B2',
    -
10 => '#660099',
    
0   => '#7F007F',
    
10  => '#990066',
    
20  => '#B2004C',
    
30  => '#CC0033',
    
40  => '#E50019',
    
50  => '#FF0000'
);

function 
get_html4temp($temp)
{
    global 
$_TEMPCOLORS;    
    
    
// Zahl von double nach integer umwandeln
    
$temp round($temp0);
    foreach (
$_TEMPCOLORS as $min => $color)
    {
        if (
$temp <= $min)
        {
            return 
$color;
        }
    }    


EDIT:
Sorry, hab nicht gesehen, dass vor mir schon jemand geantwortet hat,
aber meine Alternative erscheint mir vom Code her trotzdem schöner, als die vielen elfseifs.

codethief 22.12.2004 19:33

@Dracaelius: Du hast dabei aber nur eine Kleinigkeit übersehen:
Wenn die Zahl > 50 ist soll #000000 genommen werden. ;)

Es müsste also noch ein return hinter dem foreach hinzugefügt werden:

PHP-Code:

// Array mit den Farbnamen
// Wichtig ist hierbei, dass die Zahlen nach der Größe Sortiert angegeben werden
$_TEMPCOLORS = array(
    -
50 => '#0000FF',
    -
40 => '#1900E5',
    -
30 => '#3300CC',
    -
20 => '#4C00B2',
    -
10 => '#660099',
    
0   => '#7F007F',
    
10  => '#990066',
    
20  => '#B2004C',
    
30  => '#CC0033',
    
40  => '#E50019',
    
50  => '#FF0000'
);

function 
get_html4temp($temp)
{
    global 
$_TEMPCOLORS;    
    
    
// Zahl von double nach integer umwandeln
    
$temp round($temp0);
    foreach (
$_TEMPCOLORS as $min => $color)
    {
        if (
$temp <= $min)
        {
            return 
$color;
        }
    }
    
    return 
'#000000';




codi.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25