Forum Clubic

Test if multiple à aléger

Bonjour à tous,

J’envoi via un formulaire huit données qu’on va appeller $un, $deux etc jusqu’à $huit

Aucune de ces données ne doivent être identique, c’est à dire que $un ne doit pas être égal à $deux ni à $trois est, ce qui est valable pour les huit données. A la base je me suis dit on va faire des test simple du type if mais c’est un peu lourd je trouve donc je viens vers vous pour voir s’il n’y aurait pas une solution plus simple que d’imbriquer un grand nombre de if

Je précise que le formulaire est envoyer avec la balise option donc une liste, ce n’est pas l’utilisateur que rempli le formulaire, il fait seulement un choix parmis une liste

J’avais aussi pensé afficher le deuxième choix, une fois le premier fait en enlevant de la liste le choix d’avant mais j’y arrive

Merci de vos réponses qui m’apporteront une grande aide et allègeront mon code

Il y a sûrement plus simple et plus efficace, mais une solution qui ne fonctionne pas trop mal :


<?
echo unique(array($un, $deux, $trois, $quatre)) ? "vrai" : "faux";

function unique($array)
{
  $buffer = array();

  foreach($array as $v)
  {
    if($buffer[$v]) return false;
    else $buffer[$v] = true;
  }
  return true;
}

Ca crée un tableau associatif $buffer, et ça stocke les valeurs du tableau $array une par une en tant que clés. Si une valeur a déjà été utilisée, alors une clé existera déjà, donc on sort de la boucle et on renvoie “false”, et si la fonction arrive au bout des valeurs sans rencontrer de doublons, alors on renvoie “true”.

A noter qu’il existe problablement une fonction PHP pour faire ça, mais j’ai la flemme de chercher. :slight_smile:

Merci beaucoup de réponse, moi ça me va très bien et elle marche parfaitement
Edité le 23/06/2009 à 17:09

J’ai pensé à un autre truc, mais bon je sais pas si c’est plus rapide :

if( count(array_unique( array($un, $deux, $trois, $quatre))) == 4)