PHP:将速记十六进制颜色转换为常规颜色

时间:2010-03-14 21:44:32

标签: php colors hex

我正在尝试制作一个将短手六角颜色变为长十六进制颜色的功能。

例如,如果有人提交“f60”,它将转换为“ff6600”。我理解我需要重复每个数字,但最有效的方法是什么?

谢谢。

4 个答案:

答案 0 :(得分:9)

这应该有效。但是,由于确切的#比较,您需要确保字符串不会添加strlen

// Done backwards to avoid destructive overwriting
// Example: f60 -> ff6600
if (strlen($color) == 3) {
    $color[5] = $color[2]; // f60##0
    $color[4] = $color[2]; // f60#00
    $color[3] = $color[1]; // f60600
    $color[2] = $color[1]; // f66600
    $color[1] = $color[0]; // ff6600
}

答案 1 :(得分:4)

$fullColor = $color[0].$color[0].$color[1].$color[1].$color[2].$color[2];

您可以将字符串的字符作为数组访问。

答案 2 :(得分:1)

这个问题不能错过好老的正念:D

 $color = preg_replace('/#([\da-f])([\da-f])([\da-f])/i', '#\1\1\2\2\3\3', $color);

虽然不是最好的解决方案......

答案 3 :(得分:0)

不是最有效的,而是另类 使用这些可以复制每种长度的每种字符串,不仅仅是3作为十六进制颜色

   <?php
     $double='';
     for($i=0;$i<strlen($str);$i++){
            $double.=$str[$i].$str[$i];
     }
   ?>

<?php
 $str="FCD";
 $split=str_split($str);
 $str='';
 foreach($split as $char) $str.=$char.$char;
 echo $str;
?>

您也可以使用正则表达式或其他...