Ayant besoin pour d'obscures raisons de stocker plusieurs valeurs dans un unique champ de ma base de données, j'ai décidé d'utiliser une seule variable pour stocker plusieurs valeurs.
J'en aurai au maximum 3 à gérer, j'ai donc fais ca :
Code :
- function triplet_set($a, $b, $c, $bit_count = 6)
- {
- return $a | ($b << $bit_count) | ($c << ($bit_count*2));
- }
- function triplet_get_item($value, $item_index, $bit_count = 6)
- {
- $bits = $bit_count * ($item_index-1);
- return ($value & ((pow(2,$bit_count)-1) << $bits)) >> $bits;
- }
- $valeur = triplet_set(15,20,37);
- echo "triplet_set: $valeur<br />";
- echo "a=".triplet_get_item($valeur, 1)." b=".triplet_get_item($valeur, 2)." c=".triplet_get_item($valeur, 3)."<br />";
|
Ca marche parfaitement (si on depasse pas les bornes pour les 3 valeurs suivant le nombre de bits aloués bien sur..)
Or, le
return ($value & ((pow(2,$bit_count)-1) << $bits)) >> $bits; |
me dérange, j'ai l'impression que c'est pas super propre et qu'on pourrait faire bcp mieux...
Des idées pour optimiser ca ? Est-ce qu'il y a un meilleur moyen de faire ?
Message édité par spark le 09-06-2004 à 16:53:19