Bonjour à tous,

J'aimerais avoir votre aide afin de faire une condition en fonction d'un tableau. Je m'explique:

J'ai ici une fonction isEqual qui prend 2 paramètres:

  • La valeur du champs ($field)
  • La valeur à laquelle le champs doit être équivalent ($mustBe)
public function isEqual($field, $mustBe){
    if($field != $mustBe){
     //Affichage d'un message d'erreur
    }
}

J'aimerais améliorer ce code en pouvant mettre un tableau dans la variable $mustBe. Par exemple, j'aimerais que si j'appelle la fonction comme ceci:

$form->isEqual('gender',['homme','femme']);

J'ai ça comme résultat:

public function isEqual($field, $mustBe){
    if(is_array($mustBe)){

        if($field != "homme" || $field != "femme"){
            //Affichage du message d'erreur
        }

    }else{
        if($field != $mustBe){
            //Affichage d'un message d'erreur
        }
    }

}

Mon problème est donc au niveau de la gestion du tableau.

Merci d'avance,

Nicwalle

3 réponses


bugland
Réponse acceptée

Salut voila ce que je te propose je sais pas si cela va répondre à la question :

public function isEqual($field, $mustBe){
    if(is_array($mustBe)){
        //on regarde si la valeur est dans le tableau si non existante on renvoi une erreur
        if (!in_array($field, $mustBe)){
            return 'erreur';
        }

    }
    else{
        if($field != $mustBe){
            //Affichage d'un message d'erreur
            return 'erreur';
        }   
    }
}

Comme toujours il y a plusieurs façons de faire. Pour commencer, il va te falloir parcourir le tableau, et tester chaque occurence avec $field. Si à un moment, la condition dit que l'occurence courante est égale à $field, alors tu retourne true. Sinon, la boucle va aller jusqu'au bout, et la fonction va retourner false par défaut.

public function isEqual($field, $mustBe) {
    // on va traiter systématiquement $mustBe comme un array pour que ce soit plus simple
    $mustBe = is_array($mustBe) ? $mustBe : [$mustBe];

    foreach ($mustBe as $value) {
        if ($value === $field) return true;
    }

    return false;
}
Nicwalle
Auteur

Bonjour, merci pour la réponse mais mon but est de voir s'il est différent de "Homme" ou de "Femme"... Dans ce cas ci, si l'utilisateur choisit homme, homme renverra true mais femme renverra false :(
J'espère que tu vois ce que je veux dire, je ne suis pas sur d'être très clair