2010-03-14 4 views
1

짧은 16 진수 색상을 긴 16 진수 색상으로 사용하는 기능을 만들려고합니다.PHP : 약식 16 진수 색상을 일반 글꼴로 변환

예를 들어 누군가 "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과 진수 색상

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