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 :

[Tableaux] Comment récupérer la clé principale d'un sous tableau


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 48
    Points : 46
    Points
    46
    Par défaut [Tableaux] Comment récupérer la clé principale d'un sous tableau
    Bonjour,

    aprés plusieurs recherche, je n'arrive pas a résoudre mon probleme.
    Tout ce que j'ai trouvé jusqu'a présent ne me correspond pas.
    Voila, j'ai un tableau avec des sous tableaux:

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array = array ( "ville" => array ( "mer", "musée", "piscine" ) );
    Mon probleme est que je veux récupérer la clé ville a partir du moment ou il y a musée dedans par exemple.
    j'ai essayé des trucs avec array_keys et array_values mais ca ne marche pas.

    Quelqu'un aurait il une idée?
    Aussi, sachant que mon tableau n'est pas encore défini, y a t il une definition qui conviendrais mieux?

    Merci d'avance



  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    As-tu essayé une imbrication de foreach() ? Je sais, ça fait un peu force brute

  3. #3
    Membre averti Avatar de Huntress
    Femme Profil pro
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Points : 402
    Points
    402
    Par défaut
    Salut,

    Moi l'idée qui me vient tout de suite à l'esprit c'est l'utilisation d'un foreach et de in_array.

    Tu fais ton foreach sur $array. Ensuite tu fais un test sur un in_array prenant en param "musée".

    Cà marche çà nan ?

    Pour la définition de ton tableau... je sais pas trop... on ne sait pas trop ce que tu veux faire avec...

    Règle n°1 du forum francophone : Parler le français...
    Pas de question technique par MP, le forum est fait pour çà, merci.

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par padawa
    Aussi, sachant que mon tableau n'est pas encore défini, y a t il une definition qui conviendrais mieux?
    Tu pourrais par exemple avoir 2 tableaux. 1 pour ville => activités et 1 pour activité => villes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $les_activites = array(
       'Grenoble' => array('Montagne', 'Ski', 'Musée'),
       'Paris'    => array('Musée', 'Embouteillages')
    );
     
    $les_villes = array(
       'Mer'            => array(),
       'Montagne'       => array('Grenoble'),
       'Ski'            => array('Grenoble'),
       'Musée'          => array('Grenoble', 'Paris'),
       'Embouteillages' => array('Paris')
    );
    A toi de voir ou tu veux les perfs au top à la création ou à la consultation...

    Après c'est vrai que ça dépend aussi du contenu de ton tableau.

    La solution de Huntress est très bien, bien que j'opterais plutot pour un while(each) plutot qu'un foreach pour pouvoir arreter la boucle à tout moment, si besoin.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    Bonjour et merci de vos reponses

    Mr N, malheureusement je ne peux pas me permettre d'avoir 2 tableaux, en fait l'exemple avec ville est juste un exemple car je ne peux pas afficher ce que je fait, mais ca s'en rapproche. Il me faut des perfs au top.

    Je voulais aussi essayé d'eviter le foreach mais je crois que je ne vais pouvoir y couper. Par contre je suis d'accord avec toi, je vais plutot le faire en while(each) car je n'ai qu'une key principale a extraire a chaque fois (encore désolé pour mon mauvais exemple)

    Je vais faire quelque essai et je viendrais mettre mon résolu

    Merci encore

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    En matière de performance tu ne peux miser sur tous les tableaux.
    Soit la solution est performante pour la consultation (méthode à 2 tableaux par exemple)
    Soit la solution est performante à la création (méthode du foreach par exemple)

    La solution choisie doit dépendre de plusieurs facteur :
    - Est-ce que j'ai assez de RAM pour me permettre de stocker plusieurs tableaux ?
    - Est-ce que je vais chercher souvent des clés au cours de l'execution de mon script ?
    - ... ?

    Par exemple tu peux utiliser un systeme de cache et combiner les deux méthodes :
    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
     
    $tab = .....;
    $cache = array();
    function search_key($value) {
       global $tab, $cache;
       if (!isset($cache[$value])) {
          $found = false;
          while (!$found && (list($k, $v) = each($tab))) {
             if (in_array($value, $v)) {
                $found = $k;
             }
          }
       }
       return $cache[$value];
    }
     
    echo search_key("musée");
    Non testé, peut être syntaxiquement incorrect mais l'esprit y est

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    Merci pour ce petit cours Mr N
    Mais j'ai fait quelque chose de beaucoup plus simple en fait.

    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
    <?php
    $tab = array (	   "MAOD" => array ( "LSW", "LHR", "LTN", "SEN", "STN" ), 
    			"LAND" => array ( "LEND", "LAW", "LAR", "LAN", "SAX", "SAN" ),
    			"PIND" => array ( "LIW", "LHI", "LTI", "SIN", "IIN" ),
    			"LAID" => array ( "LEID", "QAW", "QAR", "LQN", "SQN", "SAQ" )
    				   );
     
    /*
     * Retourne la clé principale d'un tableau a 2 dimensions par rapport a une valeur donnée.
     * La valeur doit etre unique ou sinon la première clé sera renvoyé.
     * @author Pascal Bleuse
     * @param $array Le tableau bi dimensionnel
     * @param $value La valeur recherchée
    */
    function getFirstKey ( $array, $value ) {
    	foreach ( $array as $k => $v ) {
    		if ( in_array ( $value, $array[$k] ) ) {
    			return ( $k );
    		}
    	}
    }
     
    $cle = getFirstKey( $tab, "IIN" );
    echo $cle;
     
    // renvoi PIND
    ?>
    En fait je bloqué juste parceque je cherché a éviter le foreach
    C'est de la consultation pur, le tableau sera créer en dur, donc je sais pas si un cache est utile (je connais pas encore tres bien les caches je dois dire)
    Mais je vais y reflechir pour une prochaine evolution.

    Merci


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

Discussions similaires

  1. [Tableaux] Comment récupérer un paramètre dans une <table>?
    Par Philippe PONS dans le forum Langage
    Réponses: 1
    Dernier message: 17/03/2008, 11h42
  2. [Tableaux] comment récupérer ma variable array
    Par lafmart dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2007, 03h11
  3. Réponses: 4
    Dernier message: 13/11/2006, 17h49
  4. Réponses: 1
    Dernier message: 14/09/2006, 10h53
  5. [Tableaux] Comment récupérer l'info de 2 tables
    Par dolf13 dans le forum Langage
    Réponses: 5
    Dernier message: 06/07/2006, 18h43

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