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 :

recherche dichotomique dans un tableau associatif dont les clefs ne sont pas des index mais des strings


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 36
    Points : 29
    Points
    29
    Par défaut recherche dichotomique dans un tableau associatif dont les clefs ne sont pas des index mais des strings
    J'ai un tableau associatif classique de forme clef=>valeur mais les clefs sont des string et non des index. J'ai trié le tableau avec les clefs et je dois faire une recherche dichotomique dessus pour trouver au plus vite la valeur associée à la clef que l'on me donne. Comment puis je dire "donne moi le 24 eme élément/clef de ce tableau" par exemple ?

  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
    Si c'est la clef qu'on te donne, il n'y a pas de recherche à faire. Ta valeur c'est $tab[$clef]
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Sabotage a raison, ton énoncé n'est pas clair.
    Sinon, ta réponse est probablement array_slice

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Non, je crois qu'on lui demande de donner le nième élément du tableau alors que les clefs sont des strings.

    Par contre, pas besoin de recherche dichotomique pour faire ça. Pour obtenir le 24ème élément par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function getNiemeElement($array, $nieme) {
        $keys = array_keys($array);
        return $array[$keys[--$nieme]];
    }
     
    $array = range(0, 100);
     
    echo getNiemeElement($array, 52); //Affiche 51
     
    //Et même, depuis PHP 5.4
    function getNiemeElement($array, $nieme) {
        return $array[array_keys($array)[--$nieme]];
    }
    EDIT : Bien vu le array_slice, ça marche aussi du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function getNiemeElement($array, $nieme) {
        return array_slice($array, --$nieme,1)[0];
    }
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 36
    Points : 29
    Points
    29
    Par défaut merci
    Oui bien sur il me suffirait de faire un array_key_exist ou directement prendre la valeur avec array[key] ça fonctionnerait mais c'est trop lent sur
    un tableau contenant un grand nombre de valeurs car ces fonctions fonctionnent de manière séquentielle et parcours tout le tableau afin de trouver la key donnée. Si l'on considère une fonction appelée à chaque requête à apache sur un serveur qui doit répondre à des millions de requêtes alors le gain de temps en milliseconde n'est pas anodin
    C'est pour cela que je fais ma propre fonction de recherche avec une méthode dichotomique
    Merci pour vos réponses.

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    ui bien sur il me suffirait de faire un array_key_exist ou directement prendre la valeur avec array[key] ça fonctionnerait mais c'est trop lent sur...
    un tableau contenant un grand nombre de valeurs car ces fonctions fonctionnent de manière séquentielle et parcours tout le tableau afin de trouver la key donnée
    Non, bien au contraire ! Je ne sais d'où tu sors cela mais c'est parfaitement inexact. Php est optimisé au maximum, ne t'en fait pas pour ça y a sufisament de mondequi bosse dessus pour que ça tourne sans problème.

    Il faut toujours privilégier l'utilisation d'une structure de langage (c'est-à-dire privilégier "array[key]" pour notre exemple) à une fonction native de php (qui serait du style "array_value" mais qui n'existe pas pour le coup) qui elle-même sera toujours préférable à une fonction développé par nous même (du style "ma_fonction_qui_cherche_dans_un_tableau()" ).
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  7. #7
    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
    Dire que PHP est optimisé pour tous les cas c'est peut-être un peu exageré
    Quand on cherche des valeurs dans un tableau PHP on est effectivement dans une recherche linaire : la recherche est d'autant plus longue que le tableau est grand.
    Quand on cherche des clefs, ce n'est pas vrai.
    De plus le tri du tableau nécessaire à ta bissection va de toute façon ruiner tout gain que tu pourrais obtenir ailleurs.
    Bref il faut voir exactement ce que tu veux sortir.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 07/06/2014, 09h36
  2. Réponses: 3
    Dernier message: 13/04/2010, 12h39
  3. Recherche dans un tableau associatif
    Par ericduval dans le forum Langage
    Réponses: 5
    Dernier message: 02/12/2009, 12h03
  4. Réponses: 2
    Dernier message: 04/10/2007, 13h42
  5. Réponses: 23
    Dernier message: 10/01/2006, 13h33

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