PHP: конвертировать сокращенные цвета Hex в обычный - PullRequest
1 голос
/ 15 марта 2010

Я пытаюсь создать функцию, которая будет переводить шестнадцатеричный цвет короткой руки в длинный шестнадцатеричный цвет.

Например, если кто-то отправит "f60", он будет преобразован в "ff6600". Я понимаю, что мне нужно повторять каждое число как отдельное, но какой самый эффективный способ сделать это?

Спасибо.

Ответы [ 4 ]

9 голосов
/ 15 марта 2010

Это должно работать. Тем не менее, вы должны убедиться, что строки не имеют префикса # из-за точного сравнения 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
}
4 голосов
/ 15 марта 2010

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

Вы можете получить доступ к символам строки в виде массива.

1 голос
/ 15 марта 2010

этот вопрос не может пропустить старые добрые регулярные выражения: D

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

не лучшее решение, хотя ...

0 голосов
/ 15 марта 2010

Не самый эффективный, но альтернативный с ними вы можете дублировать все виды строк с любой длиной не только 3, как Hex цвета

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

Вы также можете использовать регулярные выражения или другие ...

...