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 :

Trouver si valeur d'un tableau est contenu dans un autre


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Points : 81
    Points
    81
    Par défaut Trouver si valeur d'un tableau est contenu dans un autre
    Bonjour,
    je suis nouveau sur le forum et je ne sais pas trop si c'est le bon endroit pour vous exposer mon problème :

    J'affiche un <select> dans ma page comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    // Dans ce code il manque la class car je ne sais pas comment faire
     
    <select name="galerie" id="galerie">
      <option class="infos" value="">Sélectionnez une galerie</option>
      <?php foreach ($liste_galeries_disponibles as $galerie) : ?>
      <option value="<?php echo $galerie['id']; ?>"><?php echo $galerie['titre']; ?></option>
      <?php endforeach; ?>
    </select>
    ?>

    Je voudrais obtenir ceci au final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // la class "vert" est attribuée si la galerie n'est pas associé à ce client 
    // la class "rouge" est attribuée si la galerie est déjà attribuée. -->
    <select name="galerie" id="galerie">
      <option class="infos" value="">Sélectionnez une galerie</option>
      <option class="vert" value="7">Test 1</option>
      <option class="rouge" value="8">Test 2</option>
      <option class="rouge" value="9">Test 3</option>
      <option class="rouge" value="10">Test 4</option>
      <option class="vert" value="11">Test 5</option>
    </select>
    Mon code php actuel :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    // On recherche les infos sur le client selon N° dans le GET.
    $sql = "SELECT client_id, client_nom, client_login, client_mail, galerie_id, galerie_nom 
            FROM CLIENT
            LEFT JOIN CLIENT_GALERIE USING(client_id)
            LEFT JOIN GALERIE USING(galerie_id)
            WHERE client_id=".intval($_GET['clientId'])."";
    $result = mysql_query($sql);
    while($donnees= mysql_fetch_assoc($result))
    {
      // s'il existe au moins une galerie
      if($donnees['galerie_id'] !== NULL) 
      {
        // conception tableau de la liste des galeries visibles par le client
        if (!isset($valeurForm['galeries_accessibles'][0])) //si l'index 0 est absent c'est que c'est la première occurence
          $valeurForm['galeries_accessibles'][] = array('galerie_id' => $donnees['galerie_id'], 'galerie_titre' => $donnees['galerie_nom']);
        else//sinon on ajoute un trait d'union avant le nom
          $valeurForm['galeries_accessibles'][] = array('galerie_id' => $donnees['galerie_id'], 'galerie_titre' => ' - ' . $donnees['galerie_nom'] );
      } 
      // Pas de clients associé
      else
        $valeurForm['galeries_accessibles'] = NULL;
     
      //Données à afficher dans le formulaire
      $valeurForm['client_nom'] = display($donnees['client_nom']);
      $valeurForm['client_login'] = display($donnees['client_login']);
      $valeurForm['client_mail'] = display($donnees['client_mail']);
    }
     
    // On recherche toutes les galeries existantes dans la bdd.
    $sql = "SELECT galerie_id, galerie_nom FROM GALERIE";
    $result = mysql_query($sql);
    while( $l = mysql_fetch_assoc($result) )
      $liste_galeries_disponibles[] = array('id'=>$l['galerie_id'], 'titre'=>$l['galerie_nom']);
    Je voudrais afficher en rouge les galeries dont le client a déjà accès et en vert celles dont il n'a pas accès dans un <select>.
    Je récupère les galeries associées à un client dans un tableau de cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $valeurForm['galeries_accessibles'][0 à xxx] = array('galerie_id' => $donnees['galerie_id'], 'galerie_titre' => ' - ' . $donnees['galerie_nom'] );
    Je récupère les données, dans une autre table où sont stockés toutes les galeries disponibles, dans un tableau de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste_galeries_disponibles[0 à xxx] = array('id'=>$l['galerie_id'], 'titre'=>$l['galerie_nom']);
    Mon idée était de modifier le tableau $liste_galeries_disponibles (c'est celui dont je me sers pour afficher les valeurs dans le <select>), en y ajoutant une clé "class" comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste_galeries_disponibles[0 à xxx] = array('id'=>$l['galerie_id'], 'titre'=>$l['galerie_nom'], 'class'=>$classOptionSelect);
    Il faudrait que la variable "$classOptionSelect" soit 'vert' si l'id de la galerie à afficher dans select est aussi dans l'autre tableau.
    Et la class sera 'rouge' si l'id est présente.

    J'ai bien essayé en imbriquant plusieurs boucles et fonctions (foreach, in_array, for etc...) mais je ne m'en sort pas.

    En espèrant que je vous ai exposé mon soucis de façon compréhensible et au bon endroit.

    Quelqu'un aurait il une idée pour m'aiguiller un peu ?

    Merci d'avance pour vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 420
    Points : 15 789
    Points
    15 789
    Par défaut
    déjà tu peux construire un tableau indexés des galeries accessibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $valeurForm['galeries_accessibles'][$donnees['galerie_id']] = array(
        'galerie_id' => $donnees['galerie_id'],
        'galerie_titre' => ...,
    );
    et comme ça tu peux facilement faire le test avec "isset" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $liste_galeries_disponibles[] = array(
        'id' => $l['galerie_id'],
        'titre' => $l['galerie_nom'],
        'class' => isset($valeurForm['galeries_accessibles'][$l['galerie_id']]) ? 'vert' : 'rouge',
    );

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Points : 81
    Points
    81
    Par défaut
    Merci de ta réponse et pour m'avoir donner une direction. J'avais commencé à indexer le tableau avec l'id mais je n'arrivais pas à positionner le isset.
    Il y a du mieux mais ça ne fonctionne pas tout à fait, encore un peu à peaufiner.

    Merci encore pour m'avoir aiguiller....

    Ps: je reviendrais surement.

    EDIT: et ben ça marche nickel chrome. Un grand merci !!!!!
    Mon problème est

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester si valeur d'une cellule est contenue dans une plage
    Par Fabert dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 20/04/2015, 14h34
  2. Vérifier si une chaîne de caractère est contenu dans une autre
    Par Marvelll dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 22/02/2010, 14h54
  3. Réponses: 2
    Dernier message: 30/11/2009, 09h37
  4. Tester si un string est contenu dans un autre
    Par totoen dans le forum C#
    Réponses: 19
    Dernier message: 18/02/2008, 09h23
  5. [RegEx] Rechercher si mot est contenu dans un autre
    Par Seb33300 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/08/2007, 23h52

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