Einfärben nach Farbskala einer Zahl je nach Höhe

Johnnii360

Erfahrenes Mitglied
Servus!

Ich brauch mal bitte Eure Hilfe.

Ich möchte gerne eine Zahl, besser gesagt einen Score anhand der Höhe einfärben. Ich habe im Netz auch schon einen Schnipsel gefunden, allerdings ließ sich der nicht an meine Bedürfnisse anpassen bzw. ich hab's net hinbekommen. Das Problem ist nämlich, dass das Snippet für die range 0-100 gemacht ist. Ich habe aber nur eine von 1-4 - wobei 4 das Schlechteste ist.

Hier der Schnipsel:
PHP:
function GreenYellowRed($number) {
  $number--; // working with 0-99 will be easier

  if ($number < 50) {
    // green to yellow
    $r = floor(255 * ($number / 50));
    $g = 255;

  } else {
    // yellow to red
    $r = 255;
    $g = floor(255 * ((50-$number%50) / 50));
  }
  $b = 0;

  return "$r,$g,$b";
}
Das oberste mit 99 habe ich weggelassen. Die 50 habe ich jedweils durch 2 ersetzt, es aber auch mal mit 50 versucht. Leider blieben Werte unterhalb von 2 eher rot, dunkelorange anstatt grün.

Danke schon mal im Voraus!
 
Hallo,

wieso kompliziert, wenn's auch einfach geht?
PHP:
function chooseColor($number) {
  $colors = [1 => 'red', 2 => 'yellow', ... , 4 => 'blue'];

  if (array_key_exists($number, $colors)) {
    return $colors[$number];
  }
  else {
    // Bitte eine spezifischere Exception wählen!
    throw new Exception('Number out of range');
  }
}
 
Ja so hatte ich mir das auch schon gedacht, aber das Script oben hat schöne Abstufungen. Außerdem habe ich ja auch Kommawerte bei einem Score, die auch benötigt werden. ;)
 
Achso, das mit den Dezimalzahlen ging nicht ganz aus deinem Eingangsposting hervor.

Wenn du obigen Code nutzen willst, würde ich intuitiv sagen, dass du jede 50 durch eine 2 ersetzt.
 
Bei mir kommt bei deinem ersten Code so ein gutes Ergebnis raus:
PHP:
<?php
function GreenYellowRed($number) {
    $number--; // working with 0-99 will be easier
   
    if ($number < 2) {
        // green to yellow
        $r = floor(255 * ($number / 2));
        $g = 255;
    } else {
        // yellow to red
        $r = 255;
        $g = floor(255 * ((2-$number%2) / 4));
    }
    $b = 0;
   
    return "$r,$g,$b";
}

$var1 = GreenYellowRed(1);
$var2 = GreenYellowRed(2);
$var3 = GreenYellowRed(3);
$var4 = GreenYellowRed(4);

echo $var1 ."<p style=\"color:rgb($var1)\">Irgendein Text</p>";
echo $var2 ."<p style=\"color:rgb($var2)\">Irgendein Text</p>";
echo $var3 ."<p style=\"color:rgb($var3)\">Irgendein Text</p>";
echo $var4 ."<p style=\"color:rgb($var4)\">Irgendein Text</p>";
?>
 
Zurück