IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Divers
        Alterner des valeurs

rechercher
precedent    sommaire       telecharger


Auteur : doof
Version : 16/01/2006
Alterner des valeurs
/**
 * Class Alternate V2 by doof
 * Cette classe alterne des valeurs qu'on lui passe en parametre
 *
 * $instance = new Alternate('a', 'b', 'c');
 * echo $instance->get(); // affiche a
 * echo $instance->get(); // affiche b
 * echo $instance->get(); // affiche c
 * echo $instance->get(); // affiche a
 * ...
 */
class Alternate
{
   /***************************************************************************
   *Liste des valeurs
   *@var array
   **/
   var $item_list;

   /***************************************************************************
   *Nombre de valeurs dans la liste
   *@var int
   **/
   var $item_nbr;

   /***************************************************************************
   *Index de la valeur en cours dans la liste
   *@var int
   **/
   var $item;

   /***************************************************************************
   *Mode d'alternation
   *@var int
   **/
   var $mode;

   /***************************************************************************
   *Valeur de l'index precedant celui en cours
   *@var int
   **/
   var $lastitem = 0;

   /***************************************************************************
   *Sens dans lequel le mode ping-pong tourne actuellement, 0 = montant et 1 = descendant
   *@var int
   **/
   var $ping_mode = 0;

   /***************************************************************************
    *Constructeur, peut prendre soit plusieurs arguments qui sont les valeurs a alterner,
    *soit un tableau qui contient ces valeurs
    ****/
   function alternate()
   {
      $this->item_nbr = func_num_args()-1;
      if ($this->item_nbr == 0) {
         if (is_array(func_get_arg(0))) {
            $index=0;
            $tab = func_get_arg(0);
            ksort($tab);
            foreach ($tab as $val) {
               $this->item_list[$index++] = $val;
            }
            $this->item_nbr = sizeof($this->item_list)-1;
         } else {
            $this->item_list[0] = func_get_arg(0);
         }
      } else {
         $this->item_list = func_get_args();
      }
      $this->set_mode(0);
      $this->lastitem = $this->item_list[0];
   }

   /**************************************************************************
   *Définit le mode d'alternance
   *@param int $mode Le mode d'alternance 0 = linéaire 1 = ping-pong 2 = aléatoire
   *@param boolean $init Remet à zero la liste si TRUE
   **/
   function set_mode($mode, $init = TRUE)
   {
      if ($init == TRUE) {
         $this->init();
         $this->mode = $mode;
      } else {
         $this->item = $this->lastitem;
         $this->mode = $mode;
         $this->push();
      }
   }

   /**************************************************************************
   *Passe à la valeur suivante suivant le mode courant
   **/
   function push()
   {
      if ($this->item_nbr > 0) {
         $this->lastitem = $this->item;
         switch ($this->mode) {
         case 0: // Mode lineaire
            ($this->item < $this->item_nbr) ? $this->item++ : $this->init();
            break;
         case 1: // Mode Ping-pong
            if ($this->ping_mode == 0) {
               ($this->item < $this->item_nbr) ? ($this->item++) : ($this->ping_mode = 1);
            }
            if ($this->ping_mode == 1) {
               ($this->item > 0) ? ($this->item--) : ($this->item++ + $this->ping_mode = 0);
            }
            break;
         case 2: // Mode Random simple
               $this->item = mt_rand(0, $this->item_nbr);
            break;
         }
      }
   }

   /**************************************************************************
   *Ajoute une valeur dans la liste
   *@param string $value la valeur a rajouter
   *@param int $offset l'index, à la fin si FALSE ou valeur impossible
   **/
   function add($value, $offset = FALSE)
   {
      if (is_int($offset) && $offset >= 0 && $offset <= $this->item_nbr) {
         array_splice($this->item_list, $offset, 0, $value);
      } else {
         $this->item_list[] = $value;
      }
      $this->item_nbr++;
   }

   /**************************************************************************
   *Retourne la valeur en cours
   *@param boolean $push passe automatiquement à la valeur suivante si TRUE
   *@return string la valeur
   **/
   function get($push = TRUE)
   {
      $return = $this->item_list[$this->item];
      $push == TRUE ? $this->push() : FALSE;
      return $return;
   }

   /**************************************************************************
   *Remet à zero l'alternance
   **/
   function init()
   {
      $this->item = 0;
   }
}
Exemple d'utilisation
   //initialisation de la couleur de fond $bgcolor
   //alterne entre 3 valeurs mode ping-pong
   $bgcolor = new Alternate('#44aa44', '#ffff77', '#ee4444');
   $bgcolor->set_mode(1);
   
   //initialisation de la variable d'alignement $align
   //3 valeurs aussi en mode ping-pong
   $align = new alternate('left', 'center', 'right');
   $align->set_mode(1);
   //affichage du tableau
   echo '<table border="0" width="150">'."\n";
   for ($i = 0; $i <= 10; $i++) {
   echo "\t".'<tr><td bgcolor="'.$bgcolor->get( FALSE ).'" align="'.$align->get().'">'.$bgcolor->get().'</td></tr>'."\n";
   }
   echo '</table>';

rechercher
precedent    sommaire       telecharger

Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.