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 :

Comparer la position d'un élément dans 2 array différents [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Par défaut Comparer la position d'un élément dans 2 array différents
    Bonjour,

    J'ai listé les fonctions array() mais n'ai rien trouvé à ma botte.
    Comment feriez-vous au plus court pour comparer la position d'un élément dans 2 tableaux différents ?

    J'ai 2 états d'un classement d'une course, je veux savoir si, à ce tour (un array), une équipe a gagné ou perdu des places par rapport au tour précédent (l'autre array). Les 2 array ont été sort(), d'où la comparaison de position.

    Merci bien !

  2. #2
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    array_search pour trouver l'index dans chaque tableau et ensuite tu compares les 2 index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $tab1 = array("oranges", "apples", "pears");
    $tab2 = array("pears", "apples", "oranges");
     
    $pos1 = array_search("orange", $tab1);
    $pos2 = array_search("orange", $tab2);
    Autre possibilité, uniquement si les valeurs du tableau sont uniques : tu peux utiliser array_flip et récupérer à partir de la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $tab1 = array("oranges", "apples", "pears");
    $tab2 = array("pears", "apples", "oranges");
     
    $cles1 = array_flip($tab1);
    $cles2 = array_flip($tab2);
     
    $pos1 = $cles1['orange'];
    $pos2 = $cles2['orange'];
    La 2e solution est moins consommatrice pour les gros tableaux, surtout si tu flippes le tableau une seule fois et que tu parcours ensuite l'ensemble des clés, mais plus restrictive et peut avoir des comportements bizarres si tu as des valeurs de types mélangés
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Par défaut
    Ah, array_search() ... j'suis une b***
    Merci pour la réponse.

    J'ai à faire l'opération sur un tableau initial qui pourra atteindre 80-100 clés (c'est toujours considéré comme un petit tableau oui ? une seule valeur par clé), le mieux en terme de perf' c'est de faire un slice() et search() après, ou le search() de suite ? Je veux seulement comparer sur les 20-30 premiers.

    edit : hummmm, soit je fais mal, soit je n'obtiens pas ce que je veux avec array_search()
    Dans mon cas précis, j'ai 2 états de course dans 2 tableaux, triés par points (la clé est le nom de l'équipe, la valeur ses points) :
    Team3 -> 100pts
    Team1 -> 95pts
    Team2->90pts
    ...

    Je veux tester si entre les 2 états, par exemple, team1 a gagné ou perdu des places (donc comparer le niveau de la team dans l'un et l'autre tableau), puis faire mes traitements.

  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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ah, donc en fait le nom de l'équipe est déjà dans la clé ? Du coup, tu veux comparer la position de la clé... Hum.. array_​keys peut-être.
    Ou alors tu le fais à la main avec une double boucle.

    EDIT : peut-être quelque chose comme ça :
    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
    $avant = ['alpha' => 100, 'beta' => 90, 'gamma' => 40];
    $apres = ['alpha' => 75, 'beta' => 90, 'gamma' => 65];
    // on trie en conservant les clés
    asort($avant);
    asort($apres);
     
    $posAvant = 1;
    foreach ($avant as $teamAvant => $valAvant) {
        $posApres = 1;
        foreach ($apres as $teamApres => $valApres) {
            if ($teamAvant === $teamApres) {
                echo "l'équipe $teamAvant est passé de la position $posAvant à la position $posApres <br>";
                break;
            }
            $posApres++;
        }
        $posAvant++;
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Par défaut
    Hé merci bien, c'est parfait avec une double boucle !

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 19/03/2009, 16h18
  2. Connaître la position d'un élément dans un JPanel au niveau Layout
    Par Yannick_from_31 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/08/2007, 16h04
  3. Récupérer la position d'un élément dans la page
    Par lemok dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/07/2007, 15h46
  4. retrouver la position d'un élément dans la page
    Par Choupinou dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/08/2006, 09h35
  5. position d'un élément dans une liste
    Par john491 dans le forum Général Python
    Réponses: 8
    Dernier message: 05/05/2006, 13h13

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