我正在尝试制作一个将短手六角颜色变为长十六进制颜色的功能。
例如,如果有人提交“f60”,它将转换为“ff6600”。我理解我需要重复每个数字,但最有效的方法是什么?
谢谢。
答案 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;
?>
您也可以使用正则表达式或其他...