2010-03-14 3 views
1

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

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

спасибо.

+1

Я думаю, что в этом случае эффективность является наименее проблема ... Просто идти с простым решением, и вы прекрасно –

ответ

8

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

+1 - визуальная документация. – mynameiscoffey

+0

Фантастический! Я не знал, что вы можете захватить символ строки с переменной $ variable [lenght]; Я многое узнал из этого. Спасибо! – floatleft

4

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

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

1

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

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

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

+0

Это вряд ли эффективно в обработке или удобочитаемости. Я говорю об избежании регулярных выражений, когда будет достаточно простого решения: P –

+0

Я не сказал этого;) он просто предоставляется, так что все пользователи регулярных выражений довольны – knittl

0

Не самый эффективный, но альтернатива с этим вы можете дублировать любой вид строки с каждая длина не только 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; 
?> 

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

+1

Конечно, не самый эффективный из-за вызова str_split и цикла foreach. Но это тоже сработает ... – Macmade

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