2010-03-14 8 views
1

J'essaie de créer une fonction qui prendra une couleur hex court en hexadécimal.PHP: Convertir les couleurs hexadécimales en raccourcis

Par exemple, si quelqu'un soumet "f60" il convertira en "ff6600". Je comprends que j'ai besoin de répéter chaque numéro comme étant lui-même, mais quel est le moyen le plus efficace de le faire?

Merci.

+1

Je pense que dans ce cas, l'efficacité est le moindre problème ... Il suffit d'aller avec la solution la plus simple et vous êtes bien –

Répondre

8

Cela devrait fonctionner. Cependant, vous devez vous assurer que les chaînes ne sont pas ajoutées à # en raison de la comparaison exacte 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 - documentation visuelle. – mynameiscoffey

+0

Fantastique! Je ne savais pas que vous pouviez saisir un caractère d'une chaîne avec $ variable [longueur]; J'ai beaucoup appris de cela. Je vous remercie! – floatleft

4

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

Vous pouvez accéder aux caractères d'une chaîne comme un tableau.

1

cette question ne peut pas manquer le bon vieux regexes: D

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

pas la meilleure solution si ...

+0

Ceci n'est guère efficace dans le traitement ou la lisibilité. Je dis éviter les regex lorsqu'une solution plus simple suffira: P –

+0

je n'ai pas dit ça;) c'est juste fourni donc tous les utilisateurs de regex sont heureux – knittl

0

Pas le plus efficace, mais un alternatif avec ceux-ci vous pouvez dupliquer tous les types de chaîne avec chaque longueur non seulement 3 couleurs Hex

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

ou

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

Vous pouvez également utiliser regex ou autre ...

+1

Certainement pas le plus efficace, à cause de l'appel str_split et de la boucle foreach. Mais ça marchera aussi ... – Macmade

Questions connexes