2013-11-11 2 views
0

Я пытаюсь преобразовать шестнадцатеричное число в правильное css форматирование:Преобразование шестнадцатеричного числа в строку

$white = hexdec('#ffffff'); 

//Loops for a bunch of colours 
for($i = 0 ; $i <= $white ; $i=$i+5000) 
{ 
    //set default css background-color property 
    $backgroundValue = dechex($i); 

    //if there are less of 7 characters (ex. #fa444, or #32F, ...) 
    if($numLen = strlen(dechex($i)) < 7) 
    { 
     //insert (7 - numbers of characters) number of zeros after # 
     for ($j = 0 ; $j < 7 - $numLen ; $j++) 
      $backgroundValue = strtr($backgroundValue, '#', '#0');     
    } 
    //echo each div with each background-color property. 
    echo '<div class="colour" style="width: 10%; float: left; background: '.$backgroundValue.';">'.dechex($i).'</div>'; 
} 

Но это не работает. Как я могу превратить шестнадцатеричное число в строку вроде: #FFFFFF.

Update:

Проблема заключалась в том, что я не проходил мимо # к началу строки: $backgroundValue = '#'.dechex($i);.

Этот код работает отлично:

 $white = hexdec('#ffffff'); 
     for($i = 0 ; $i <= $white ; $i=$i+10000) 
     { 
      $backgroundValue = '#'.dechex($i); 
      $numLen = strlen(dechex($i)); 

      if($numLen < 6) 
      { 

       for ($j = 0 ; $j < (6 - $numLen) ; $j++) 
        $backgroundValue = str_replace('#', '#0', $backgroundValue);    
      } 

      echo '<div class="colour" style="width: 10%; float: left; background: '.$backgroundValue.';">'.$backgroundValue.'</div>'; 
     } 
+0

Эта ссылка может помочь: http://www.anyexample.com/programming/php/php_convert_rgb_from_to_html_hex_color.xml – jeff

+0

'$ белый = HexDec ('FFFFFF'); // <- 16777215 var_dump (dechex ($ white)); // <- 'ffffff'' – TiMESPLiNTER

+0

Вам не хватало ')' для функции 'strtr()' и '#' для свойства color, но оно работает для меня? http://jsfiddle.net/fxm79/ http://sandbox.onlinephpfunctions.com/code/efb1e4c7a9cd44e8009f544c323b8009adb211e1 –

ответ

1

Почему бы просто не использовать str_repeat?

$end = 0xffffff; 

for ($i = 0; $i < $end; $i += 5000) { 
    $color = (string) dechex($i); 
    $backgroundValue = '#' . str_repeat('0', 6 - strlen($color)) . $color; 
    echo '<div class="colour" style="width: 10%; float: left; background: '.$backgroundValue.';">'.dechex($i).'</div>'; 
} 

вы можете также использовать Sprintf

$backgroundValue = sprintf('#%06x', $i); 
+1

зачем использовать 'str_repeat', когда есть функция' str_pad'? ''#'. str_pad (dechex ($ i), 6, '0', STR_PAD_LEFT)' – bitWorking

+0

, потому что ленив, чтобы закодировать правильные параметры для str_pad – Philipp

+0

Спасибо человеку. Так быстро ... – Manolo

Смежные вопросы