2012-04-15 3 views
0

Ich versuche, einen PHP-RGB-zu-HEX-Konverter zu schreiben, und ich versuche, eine Funktion zu verwenden, um RGB-Zahlen in Buchstaben zu konvertieren, wenn sie zwischen 10 und 15 sind (und nein, ich kann nicht verwenden " dechex() "Funktion). Dies ist, wie ich es jetzt codiert:Wie verwende ich switch-Anweisung innerhalb der Funktion, um Variablen in PHP zu ändern?

function convToHex(&$hexInt) 
{ 
    switch($hexInt){ 
     case 10: 
      $hexInt = "A"; 
      break; 
    } 
} 

//create six hexadecimal variables for "hexMain" 

$hex1 = intval($r/16); 
$hex2 = $r % 16; 
$hex3 = intval($g/16); 
$hex4 = $g % 16; 
$hex5 = intval($b/16); 
$hex6 = $b % 16; 

$rgb = "#" . $r . $g . $b; 

echo convToHex($hex1); 

Das Problem ist, dass, wenn ich versuche, es zu Echo, nur der Wert nach oben als 0 kommt Was ist der beste Weg wäre, „$ hex1“, "zu umwandeln $ hex2 ", und so weiter, ohne" dechex() "zu verwenden?

+0

Willkommen zu S Überlauf! –

+0

Wo setzen Sie '$ r',' $ g', '$ b', und wenn Sie die Funktion' convToHex' zurückgeben? –

+0

warum nicht 'dechex()'? – Starx

Antwort

1

Sie müssen den Wert ($ hexInt in diesem Fall) in Ihrer Funktion zurückgeben. Dann brauchen Sie nicht mit einer Referenz zu arbeiten.

function convToHex($hexInt) { 
    // do things 
    return $hexInt; 
} 

echo convToHex($hexInt); 
1

Ihr Problem ist in dieser Zeile:

echo convToHex($hex1); 

Wenn Sie mit dem Verweis übergeben wollen, dann müssen Sie die Funktion aufrufen, um die Variable zu ändern, dann ist es echo (da die Funktion ‚gewonnen t den Wert zurückgeben, den es ändert), z

convToHex($hex1); 
echo $hex1; 

... auch ein Grund, etwas zu verwenden, nicht wie:

function rgb2hex($r, $g, $b) { 
    return sprintf("#%02X%02X%02X", $r, $g, $b); 
} 

oder, wenn Sie etwas näher an Ihre ursprüngliche Logik wollen:

function rgb2hex($r, $g, $b) { 
    // takes ints $r, $g, $b in the range 0-255 and returns a hex color string 
    $hex_digits = "ABCDEF"; 
    $hex_string = ""; 

    $hex_string .= substr($hex_digits, $r/16, 1); 
    $hex_string .= substr($hex_digits, $r % 16, 1); 
    $hex_string .= substr($hex_digits, $g/16, 1); 
    $hex_string .= substr($hex_digits, $g % 16, 1); 
    $hex_string .= substr($hex_digits, $b/16, 1); 
    $hex_string .= substr($hex_digits, $b % 16, 1); 

    return "#" . $hex_string; 
} 

verwenden entweder von diese würden etwas wie einschließen:

$r = 12; 
$g = 234; 
$b = 45; 

$hex_string = rgb2hex($r, $g, $b); 
echo $hex_string . "\n"; 
+0

Warum 'echo $ hex1' nicht zurückgibt' $ hex1 = intval ($ r/16); 'result? –

+0

Es sollte, ich bin mir sicher, es tut. –

+0

{echo $ hex1} ist nicht das Problem hier. Das Problem besteht darin, eine Funktion zu verwenden, um eine Zahl größer als 9 in einen Buchstaben zu konvertieren, der bei A beginnt. – MrMedia715

Verwandte Themen