Auteur : doof
| Version : 16/01/2006 | | |
| | /**
* 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();
* echo $instance->get();
* echo $instance->get();
* echo $instance->get();
* ...
*/
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:
($this->item < $this->item_nbr) ? $this->item++ : $this->init();
break;
case 1:
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:
$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
$bgcolor = new Alternate('#44aa44', '#ffff77', '#ee4444');
$bgcolor->set_mode(1);
$align = new alternate('left', 'center', 'right');
$align->set_mode(1);
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>'; |
|
|
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.