2012-04-15 3 views
0

私はPHPのRGBからHEXへの変換を試みていますが、10から15の間であればRGB番号を文字に変換する関数を使用しようとしています(いいえ、 dechex() "関数)。私はそれが今のコード化されたか。これは次のとおりです。PHPで変数を変更するために関数内のswitch文を使用するにはどうすればよいですか?

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); 

問題は、私はそれをエコーし​​ようとすると、値は単に「$のHEX1」を変換するための最良の方法だろう何を0として起動しますということです」 $ hex2 "、" dechex() "を使用しないでそのようにする?

+0

ようこそSタックオーバーフロー! –

+0

'$ r'、' $ g'、 '$ b'を設定し、' convToHex'関数を返すときは? –

+0

なぜdechex()ではないのですか? – Starx

答えて

1

関数内で値(この場合は$ hexInt)を返す必要があります。 それでは、リファレンスを扱う必要はありません。

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

echo convToHex($hexInt); 
1

あなたの問題は、この行である:

echo convToHex($hex1); 

あなたが参照渡ししたい場合は、あなたは関数が勝ったため、「(それをエコー、変数を変更する機能を呼び出す必要がありますtは変更する値を返します)。

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; 
} 

は、のいずれかを使用する:あなたは、元のロジックに近い何かをしたい場合は、

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

か:

convToHex($hex1); 
echo $hex1; 

...また、どのような理由のようなものを使用しませんこれらは次のようなものになります:

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

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

なぜ 'echo $ hex1'は' $ hex1 = intval($ r/16); 'result?を返さないのですか? –

+0

それはそうだと確信しています。 –

+0

{echo $ hex1}は問題ではありません。問題は、9より大きい任意の数値をAで始まる文字に変換する関数を使用しようとしています。 – MrMedia715

関連する問題