IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifier un array


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut Vérifier un array
    Bonjour j'ai une variable a vérifié
    elle me renvoie des array comme ceci
    Array ( [0] => 1 [1] => 2 [2] => 3 )
    et moi je dois faire un test si ==1 alors si ==2 si ==1,2etc
    j'ai fait ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if (in_array(array(1), $newsletter, true)){
    $subscribe = array(1);
    }elseif (in_array(array(2), $newsletter, true)) {
    $subscribe = array(2);
    }elseif (in_array(array(3), $newsletter, true)) {
    $subscribe = array(3);
    }elseif (in_array(array(1, 2), $newsletter, true)) {
    $subscribe = array(1,2);
    }elseif (in_array(array(1, 3), $newsletter, true)) {
    $subscribe = array(1,3);
    }elseif (in_array(array(2, 3), $newsletter, true)) {
    $subscribe = array(2,3);
    }elseif (in_array(array(1, 2, 3), $newsletter, true)) {
    $subscribe = array(1,2,3);
    }else{
    $subscribe = array(0);
    }
    $newsletter étant le array en question

    mais cela ne fonctionne pas => vous auriez une idée ?
    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne comprends pas ce que tu veux faire.
    Dans le code que tu écris quand $newsletter contient 1 alors $suscribe contient 1 ... quand $newsletter contient 1 et 2 alors $subscribe contient 1 et 2 ...
    Quelle est le but, la logique de ces tests ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut
    hello alors c'est vrai j'ai pas develloper le contexte
    $newsletter est une variable venant d'un formulaire (case à cocher) qui permet à l'utilisateur de choisir la newsletter ou il veut s'abonné
    elle renvoie
    cas 1 Array ( [0] => 1 [1] => 2 [2] => 3 )
    cas 2 Array ( [0] => 1 )
    cas 3 Array ( [1] => 2 )
    etc

    mes conditions permettent de checker les valeurs et de mettre ca dans une autre variable
    $subscribe = array(1,2,3);
    qui elle est insérer dans une boucle d'enregistrement dans la bdd
    ce que je veut faire c'est si la case 1 est coché
    alors inscription dns la liste 1 etc etc
    c'est plus clair ?
    Merci

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En gros, tu veux vérifier que $newsletter ne contient pas autre chose que 1, 2 ou 3 et ensuite copier les valeurs dans $subscribe ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut
    je veus verifier ce que contiens $newsletter puis en fonction remplir le $subscribe => le fait qu'ils aient les même entrée est une coeincidence
    cela pourrait etre
    si $newsletter contiens 1 ET 3
    alors
    $subscribe = array(5,6)
    ca c'est moi qui choisi en fonction des id des neswletters

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En supposant qu'à chaque valeur reçue dans newsletter correspond une valeur à mettre dans subscribe, tu peux faire un tableau de correspondance, avec en index la donnée reçue du formulaire et en valeur la donnée à mettre dans $subscribe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $news_sub = array('1' => '1', '2' => '2', '3' => '3');
    $subscribe = array();
    foreach ($newsletter as $news_id) {
        if (isset($news_sub[$news_id])) {
            $subscribe[] = $news_sub[$news_id];
        } else {
            // on a reçu une valeur qui ne correspond à rien : traitement d'erreur : on vide $subscribe et on sort de la boucle
            $subscribe = array();
            break;
        }
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut
    je comprend a peu pret ton code (je suis débutant)
    mais je dois vraiment avec un $subscribe = array(...);
    car c'est la ligne dont j'ai besoins pour me pluguer sur le code de la newsletter (que je n'ai pas fait) lol

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Gné ? Tu as besoin d'une syntaxe particulière pour pouvoir utiliser un code qui n'est pas encore écrit ? Peut-être devrais-tu écrire l'autre morceau de code d'abord...
    Bon sinon, en reprenant ton code du 1er post, tu peux utiliser array_​diff et/ou array_​intersect pour comparer ce que tu reçois et ce que tu attends:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function array_contains_all($ref, $array) {
        $intersect = array_intersect($ref, $array);
        return ($intersect === $ref);
    }
     
    if (array_contains_all(array(1), $newsletter)){
        $subscribe = array(1);
    }elseif (array_contains_all(array(2), $newsletter)) {
        $subscribe = array(2);
    }elseif (array_contains_all(array(3), $newsletter)) {
        $subscribe = array(3);
    }elseif (array_contains_all(array(1, 2), $newsletter)) {
        $subscribe = array(1,2);
    }elseif (array_contains_all(array(1, 3), $newsletter)) {
        $subscribe = array(1,3);
    }elseif (array_contains_all(array(2, 3), $newsletter)) {
        $subscribe = array(2,3);
    }elseif (array_contains_all(array(1, 2, 3), $newsletter)) {
        $subscribe = array(1,2,3);
    }else{
        $subscribe = array(0);
    }
    Mais c'est à peu près aussi optimisé qu'un maillot de bain en plomb

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut
    hello alors je vais essayer d'être encore plus précis

    Ceci me permet de recuperer les valeurs de mon formulaire et utilise l'api du programme qui gere ma newsletter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $jinput = JFactory::getApplication()->input;
    $tabForm = $jinput->get('form', array(), 'ARRAY');
    $newsletter = $tabForm[abonnementnewsletter];
     
    $postData = JRequest::getVar('form');
    if(empty($postData['abonnementnewsletter'])) return;
     
     
    include_once(rtrim(JPATH_ADMINISTRATOR,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_acymailing'.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'helper.php');
     
     $myUser = new stdClass();
     $myUser->email = strip_tags($postData['email']);
     $myUser->name = strip_tags($postData['nom']);
     $myUser->prenom = strip_tags($postData['prenom']);
     $subscriberClass = acymailing_get('class.subscriber');
     
     $subid = $subscriberClass->save($myUser);
     
     
    $subscriberClass->sendConf($subid); //we send the confirmation email... only if needed based on the current user status and the option from the Acy configuration page.
    ici mon code pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if (in_array(array(1), $newsletter, true)){
    $subscribe = array(1);
    }elseif (in_array(array(2), $newsletter, true)) {
    $subscribe = array(2);
    }elseif (in_array(array(3), $newsletter, true)) {
    $subscribe = array(3);
    }elseif (in_array(array(1, 2), $newsletter, true)) {
    $subscribe = array(1,2);
    }elseif (in_array(array(1, 3), $newsletter, true)) {
    $subscribe = array(1,3);
    }elseif (in_array(array(2, 3), $newsletter, true)) {
    $subscribe = array(2,3);
    }elseif (in_array(array(1, 2, 3), $newsletter, true)) {
    $subscribe = array(1,2,3);
    }else{
    $subscribe = array(0);
    }
    là la fin de l'api d'inscription
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     $newSubscription = array();
     if(!empty($subscribe)){
     foreach($subscribe as $listId){
     $newList = array();
     $newList['status'] = 1;
     $newSubscription[$listId] = $newList;
     }
     }
     $subscriberClass->saveSubscription($subid,$newSubscription);
    $thankYouMessage=print_r($newsletter,true);
    l'dée étant de récupérer ce qui as était mis dans le bouton radio
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $newsletter = $tabForm[abonnementnewsletter];
    qui est sous forme de array
    et de faire si j'ai 1 => l'inscription à la liste 1
    si c'est 1 et 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $subscribe = array(1,3);
    code ca cela passe dans le process d'inscription de l'api

    c'est plus clair ?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans tous les codes que tu nous montres tu mets dans $subscribe exactement ce qu'il y a dans $newsletter donc je ne vois pas l'interêt de toutes ces conditions.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut
    oui c'est vrai
    si je fait $suscribe = $newsletter; ca marche
    mais je voulais comprendre comment faire une condition sur une array ... pour apprendre
    lol

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Dans la plupart des cas, les conditions sont du type
    • Si le tableau en entrée contient la valeur 1, alors mettre la valeur A dans le tableau en sortie.
    • Si le tableau en entrée contient la valeur 2, alors mettre la valeur B dans le tableau en sortie.

    et ne sont pas mutuellement exclusives. Si le tableau en entrée contient 1 et 2, on aura A et B en sortie.

    Gérer le cas "1 et 2 en entrée" à part implique de faire le travail à l'envers, avec des conditions du type :
    • Si le tableau en entrée contient la valeur 1 ET le tableau en entrée contient la valeur 2, alors mettre la valeur C dans le tableau en sortie.
    • Sinon Si le tableau en entrée contient la valeur 1, alors mettre la valeur A dans le tableau en sortie.
    • Sinon Si le tableau en entrée contient la valeur 2, alors mettre la valeur B dans le tableau en sortie.

    Et franchement c'est la plaie. Donc la question est : as-tu réellement besoin de faire ce genre de conditions ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut
    c'est toujours bien d'apprendre lol
    encore merci pour vos retours
    et bonnes fêtes

Discussions similaires

  1. Comment vérifier si Excel est installé ?
    Par mathieutlse dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 16/08/2017, 18h49
  2. Erreur "size array"
    Par boobob dans le forum C
    Réponses: 3
    Dernier message: 06/08/2003, 10h18
  3. TStringList en array of string
    Par JediKerian dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2003, 15h37
  4. Réponses: 2
    Dernier message: 23/02/2003, 00h49
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo