[PHP] Stocker plusieurs valeurs en une seule et les récupérer

Stocker plusieurs valeurs en une seule et les récupérer [PHP] - PHP - Programmation

Marsh Posté le 09-06-2004 à 16:52:10    

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 :
  1. function triplet_set($a, $b, $c, $bit_count = 6)
  2. {
  3.   return $a | ($b << $bit_count) | ($c << ($bit_count*2));
  4. }
  5. function triplet_get_item($value, $item_index, $bit_count = 6)
  6. {
  7.   $bits = $bit_count * ($item_index-1);
  8.   return ($value & ((pow(2,$bit_count)-1) << $bits)) >> $bits;
  9. }
  10. $valeur = triplet_set(15,20,37);
  11. echo "triplet_set: $valeur<br />";
  12. 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
Reply

Marsh Posté le 09-06-2004 à 16:52:10   

Reply

Marsh Posté le 09-06-2004 à 18:04:16    

Pourquoi tu linéarises pas tes valeurs tout simplement ?

Reply

Marsh Posté le 09-06-2004 à 18:12:07    

Tu mets tout dans un tableau/objet que tu sérialises. C'est mois léger que ton truc que je n'ai pas lu mais c'est plus propre je trouve.

Reply

Marsh Posté le 09-06-2004 à 21:36:32    

Le champ ou je stocke ca dans ma BDD est un BIGINT...
Donc il faut que je stocke une valeur numérique
Et ce champ DOIT rester en numérique....

Reply

Marsh Posté le 09-06-2004 à 21:37:46    

naceroth a écrit :

Pourquoi tu linéarises pas tes valeurs tout simplement ?


 
Ca veut dire quoi ? :D

Reply

Marsh Posté le 09-06-2004 à 21:51:25    

spark a écrit :

Ca veut dire quoi ? :D


C'est la même chose que sérialiser


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 09-06-2004 à 21:54:09    

Et ca veut dire quoi sérialiser ?  
-> C'est la même chose que linéariser :D :D

Reply

Marsh Posté le 09-06-2004 à 23:51:47    

spark a écrit :

Et ca veut dire quoi sérialiser ?  
-> C'est la même chose que linéariser :D :D


 
Mettre toutes les données à la queue leuleu


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 10-06-2004 à 00:24:25    

yep, j'me suis documenté sur le sujet entre temps.
Donc, j'obtiendrais une chaine, et elle va avoir un peu de mal a rentrer dans mon BIGINT de ma table :D
 
Donc, ma solution avec mes 2 fonctions est la bonne.
Je voulais juste savoir s'il n'y avait pas moyen d'optimiser un peu + car je suis super nul avec les decalages de bits et les masques....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed