Partage
  • Partager sur Facebook
  • Partager sur Twitter

Organisation d'un array

    12 avril 2017 à 15:54:21

    Salut !

    J'ai créé un classement de quelques joueurs d'un jeu vidéo, je vais chercher leurs infos sur une API.

    J'ai donc a la fin un array $data, dont les valeurs importantes sont $data['name'], $data['townHallLevel'], $data["expLevel"] et $data["tag"].

    Pour le moment, je les affiches normalement, en les organisant manuellement (en fonction du niveau) mais j'aimerais pouvoir les classer et il me semble que le mieux, c'est de les classer dans un array.

    Ce qui rend la manipulation difficile:

    Pour récupérer les informations, je les récuperes dans une boucle while en les affichant directement (ce qui fait que $data change constament).

    Je voudrais les classer en fonction du niveau, sachant qu'il y a plusieurs autres variables qui correspondent aux joueurs mais qui ne sont pas le niveau qui doivent etre classer dans le meme ordre ($data["tag"] par exemple).

    Voila, je demande votre aide parce que c'est trop tordu pour moi.

    Si vous avez besoin que je vous explique quelque chose que vous n'avez pas compris (j'ai du mal a expliquer clairement ce que je veux dire) ou si vous voulez plus de details, n'hésitez pas a me poser des questions ! 

    Enorme merci a celui ou celle qui pourra m'aider :D

    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2017 à 16:04:40

      Coucou,

      si j'ai bien compris, tu as donc un tableau multi-dimensionnel et tu souhaites trier en fonction d'une valeur des sous-tableaux ?

      Si c'est bien le cas, tu peux te tourner vers la fonction usort qui est très pratique pour cela.

      Voilà =)

      • Partager sur Facebook
      • Partager sur Twitter
        12 avril 2017 à 16:27:17

        Bonjour,

        Sans forcement tout nous mettre, mais juste un exemple représentatif

        - montre nous ce que tu recois de l'api

        - ce que tu souhaiterai obtenir comme tableau cela nous permetra de savoir si le resultat de nos traitement retourne bien ce que tu attends

        - et ton code actuelle parce que ce ne doit pas être compliqué a faire mais je ne ferai pas tout a ta place si tu n'as pas deja commencé a bosser dessus

        • Partager sur Facebook
        • Partager sur Twitter
        "Il est hélas devenu évident aujourd’hui que notre technologie a dépassé notre humanité"  A.E.
          12 avril 2017 à 16:34:03

          YoshiiSenpai a écrit:

          Coucou,

          si j'ai bien compris, tu as donc un tableau multi-dimensionnel et tu souhaites trier en fonction d'une valeur des sous-tableaux ?

          Si c'est bien le cas, tu peux te tourner vers la fonction usort qui est très pratique pour cela.

          Voilà =)

          J'y connais rien du tout dans les tableaux en fait x) Je m'en suis rendu compte en cherchant un peu plus.

          En gros, j'ai quelque chose que ressemble a ca:

          while($whileTest <= 20) {

             Je récupère ici le tableau $data dans lequel il y a une tone d'information et qui va etre différent a chaques tours de while. Les informations qui            m'interessent sont marquées en haut.

             echo $data['expLevel']; (Par exemple)

             $whileTest++;

          }

          je veux donc stocker mes informations, j'imagine qu'il faut que je fasse un tableau $level['$whileTest'][Les différentes variables que je veux récupérer].

          Le probleme c'est que parmis les différentes variables a récupérer, il y a le niveau, et c'est avec ce niveau que je veux classer les joueurs (je ne peux pas faire $level[niveau][Les différentes autres variables] car 2 joueurs peuvent avoir le meme niveau.

          Je sais pas si c'est la bonne facon.

          Par contre, j'ai regardé le usort et ca m'a l'air d'etre bon, mon probleme se dirige juste dans le stockage du coup, c'est la ou j'ai vraiment de nombreux problemes.

          kets14 a écrit:

          Bonjour,

          Sans forcement tout nous mettre, mais juste un exemple représentatif

          - montre nous ce que tu recois de l'api

          - ce que tu souhaiterai obtenir comme tableau cela nous permetra de savoir si le resultat de nos traitement retourne bien ce que tu attends

          - et ton code actuelle parce que ce ne doit pas être compliqué a faire mais je ne ferai pas tout a ta place si tu n'as pas deja commencé a bosser dessus


          Je recois un array $data contenant une tonne de variables.

          J'aimerais avoir un tableau contenant les joueurs triés en fonction de leur niveau

          Pour le code j'ai rien du tout qui marche (c'est pour ca que je demande de l'aide, pour savoir plus ou moins comment faire).

          Ici, il y a 20 variables qui correspondent a 20 joueurs classés par leur niveau (lorsque le classement change, je dois changer manuelement ici, je vais en chercher 1 par tours du while

          $whileTest = 1;

          while($whileTest <= 20) {

          Ici, il y a le code permettant d'aller chercher le $data dans l'api

          $playerTag = $data['tag'];

          $playerTag = substr($playerTag, 1);   Je m'en sert juste car le tag commence par # et je ne peux pas le faire passer par l'url si il y a un #.

          ?><a href='player.php?tag=<?php echo $playerTag; ?>' target="_blank" id="players" ><p><?php echo $whileTest ?> - [TH<?php echo $data["townHallLevel"]; ?>] <?php echo $data["name"]; ?> (<?php echo $data["tag"]; ?>) : <?php echo $data["expLevel"]; ?></p></a><?php

          $whileTest++;

          }

          -
          Edité par paul64lafourcade 12 avril 2017 à 16:49:28

          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2017 à 17:13:46

            paul64lafourcade a écrit:

            Ici, il y a 20 variables qui correspondent a 20 joueurs classés par leur niveau (lorsque le classement change, je dois changer manuelement ici, je vais en chercher 1 par tours du while

            $whileTest = 1;

            while($whileTest <= 20) {

            Ici, il y a le code permettant d'aller chercher le $data dans l'api

            $playerTag = $data['tag'];

            $playerTag = substr($playerTag, 1);   Je m'en sert juste car le tag commence par # et je ne peux pas le faire passer par l'url si il y a un #.

            ?><a href='player.php?tag=<?php echo $playerTag; ?>' target="_blank" id="players" ><p><?php echo $whileTest ?> - [TH<?php echo $data["townHallLevel"]; ?>] <?php echo $data["name"]; ?> (<?php echo $data["tag"]; ?>) : <?php echo $data["expLevel"]; ?></p></a><?php

            $whileTest++;

            }


            ET sinon il fait beau chez toi(#ironie, #second degré), si je te demandes des infos ce n'est pas juste pour avoir le plaisir d'user mon clavier! Mais pour mieux t'aider ! si on ne sait meme pas quel api tu utilises ni ce qu'elle t'envoie on navigue a l'aveuglette

            et ce n'est pas

            Ici, il y a le code permettant d'aller chercher le $data dans l'api

            qui va nous faire avancer

            • Partager sur Facebook
            • Partager sur Twitter
            "Il est hélas devenu évident aujourd’hui que notre technologie a dépassé notre humanité"  A.E.
              12 avril 2017 à 17:25:22

              kets14 a écrit:

              paul64lafourcade a écrit:

              Ici, il y a 20 variables qui correspondent a 20 joueurs classés par leur niveau (lorsque le classement change, je dois changer manuelement ici, je vais en chercher 1 par tours du while

              $whileTest = 1;

              while($whileTest <= 20) {

              Ici, il y a le code permettant d'aller chercher le $data dans l'api

              $playerTag = $data['tag'];

              $playerTag = substr($playerTag, 1);   Je m'en sert juste car le tag commence par # et je ne peux pas le faire passer par l'url si il y a un #.

              ?><a href='player.php?tag=<?php echo $playerTag; ?>' target="_blank" id="players" ><p><?php echo $whileTest ?> - [TH<?php echo $data["townHallLevel"]; ?>] <?php echo $data["name"]; ?> (<?php echo $data["tag"]; ?>) : <?php echo $data["expLevel"]; ?></p></a><?php

              $whileTest++;

              }


              ET sinon il fait beau chez toi(#ironie, #second degré), si je te demandes des infos ce n'est pas juste pour avoir le plaisir d'user mon clavier! Mais pour mieux t'aider ! si on ne sait meme pas quel api tu utilises ni ce qu'elle t'envoie on navigue a l'aveuglette

              et ce n'est pas

              Ici, il y a le code permettant d'aller chercher le $data dans l'api

              qui va nous faire avancer

              Je fais ca pour simplifier étant donné que le fait d'aller chercher les valeurs marche déja et que c'est pas la mon probleme mais si ca te fait plaisir: 

              https://developer.clashofclans.com/#/documentation

              <?php

              $player[1] = '#922YY200L'; //TH MAXER

              $player[2] = '#98LQ829YG'; //INDO_PUSH

              $player[3] = '#2PG8PP09G'; //bayu

              $player[4] = '#89JPPRUY'; //Jives

              $player[5] = '#Y222YCJR'; //^_^

              $player[6] = '#2YUPCYCCV'; //XXHEROEXX

              $player[7] = '#8PY89UG9Q'; //Weird Tweets!

              $player[8] = '#LJUGL2CG'; //saltyXnoodles

              $player[9] = '#9RCR9YG9P'; //Monkey D. Yanis

              $player[10] = '#29QPJGCV2'; //Axels~

              $player[11] = '#20C2G9L98'; //Kaz

              $player[12] = '#2Q9RGUY09'; //-.-

              $player[13] = '#9YR0VPJOR'; //Alien Commander

              $player[14] = '#88QLC9OPU'; //jj

              $player[15] = '#8UQC0JQQJ'; //KaiTheNub

              $player[16] = '#8G2QVGQVJ'; //Jr Hartfield

              $player[17] = '#YQUCVLP'; //Toxic

              $player[18] = '#8GQ8VV0RL'; //Aibergen

              $player[19] = '#9RRVVUCPY'; //Ryan

              $player[20] = '#2PQG2U2J'; //~Chief Helmut~

              $player[21] = '#9Y2L0YJ0R'; //MightyThom

              $player[22] = '#882JQC9QL'; //zoel em

              $whileTest = 1;

              while($whileTest <= 22) {

              $token = "secret";

              $playertag = $player[$whileTest];

              $url = "https://api.clashofclans.com/v1/players/" . urlencode($playertag);

              $ch = curl_init($url);

              $headr = array();

              $headr[] = "Accept: application/json";

              $headr[] = "Authorization: Bearer ".$token;

              curl_setopt($ch, CURLOPT_HTTPHEADER, $headr);

              curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

              curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

              $res = curl_exec($ch);

              $data = json_decode($res, true);

              curl_close($ch);

              $playerTag = $data['tag'];

              $playerTag = substr($playerTag, 1);

              ?><a href='player.php?tag=<?php echo $playerTag; ?>' target="_blank" id="players" ><p>[TH<?php echo $data["townHallLevel"]; ?>] <?php echo $data["name"]; ?> (<?php echo $data["tag"]; ?>) : <?php echo $data["expLevel"]; ?></p></a><?php

              $whileTest++;

              }

              ?>

              Voila, c'est mon code exact exepté pour le token



              • Partager sur Facebook
              • Partager sur Twitter
                12 avril 2017 à 18:25:24

                C'est pas pour mon plaisir a la limite je m' en balec de ton soucis c'est pas ca qui changera ma vie et malgrés tout j'essaie de t'aider. Mais juste avec ton dernier message j'ai obtenu une info importante que je t'ai demandé a mon premier message c'est a dire la structure de ce que te  renvoie l'api

                {
                  "tag": "string",
                  "name": "string",
                  "expLevel": 0,
                  "league": {
                    "id": 0,
                    "name": "string",
                    "iconUrls": {
                      "small": "string",
                      "large": "string",
                      "medium": "string"
                    }
                  },
                  "trophies": 0,
                  "attackWins": 0,
                  "defenseWins": 0,
                  "clan": {
                    "tag": "string",
                    "name": "string",
                    "clanLevel": 0,
                    "badgeUrls": {
                      "small": "string",
                      "large": "string",
                      "medium": "string"
                    }
                  },
                  "bestTrophies": 0,
                  "donations": 0,
                  "donationsReceived": 0,
                  "warStars": 0,
                  "role": "string",
                  "townHallLevel": 0,
                  "legendStatistics": {
                    "legendTrophies": 0,
                    "currentSeason": {
                      "rank": 0,
                      "trophies": 0,
                      "id": "string"
                    },
                    "previousSeason": {
                      "rank": 0,
                      "trophies": 0,
                      "id": "string"
                    },
                    "bestSeason": {
                      "rank": 0,
                      "trophies": 0,
                      "id": "string"
                    }
                  },
                  "achievements": [
                    {
                      "name": "string",
                      "stars": 0,
                      "value": 0,
                      "target": 0,
                      "completionInfo": "string"
                    }
                  ],
                  "troops": [
                    {
                      "name": "string",
                      "level": 0,
                      "maxLevel": 0
                    }
                  ],
                  "heroes": [
                    {
                      "name": "string",
                      "level": 0,
                      "maxLevel": 0
                    }
                  ],
                  "spells": [
                    {
                      "name": "string",
                      "level": 0,
                      "maxLevel": 0
                    }
                  ]
                }

                cela peut paraitre rien pour toi mais cela nous fais une base de travail parce que l'on sait de quoi on part afin d'obtenir le résultat souhaité

                • Partager sur Facebook
                • Partager sur Twitter
                "Il est hélas devenu évident aujourd’hui que notre technologie a dépassé notre humanité"  A.E.
                  12 avril 2017 à 18:52:40

                  kets14 a écrit:

                  C'est pas pour mon plaisir a la limite je m' en balec de ton soucis c'est pas ca qui changera ma vie et malgrés tout j'essaie de t'aider. Mais juste avec ton dernier message j'ai obtenu une info importante que je t'ai demandé a mon premier message c'est a dire la structure de ce que te  renvoie l'api

                  cela peut paraitre rien pour toi mais cela nous fais une base de travail parce que l'on sait de quoi on part afin d'obtenir le résultat souhaité

                  Désolé d'avoir été un peu "sec", mais je comprennais pas en quoi ca pouvait nous avancer.

                  Donc, mon but pour ce site c'est de récupérer les informations du data et de faire un classement des niveaux. Ce que je fesais manuellement (le classement. Les niveaux, eux sont mis a jours automatiquement).

                  J'ai trouvé cette méthode pour récupérer les informations, je la comprend pas completement et j'imagine que c'est pas du tout propre étant donné que je l'ai bricolé car a la base elle permettait d'aller chercher des informations dans l'aip sur autre chose.

                  Le classement est donc mon probleme.

                  J'imagine qu'il va falloir utiliser des tableaux multidimentionnels ce qui est un peu vague pour moi (je me suis documenté dessus mais c'est toujours tres flou)

                  Merci

                  -
                  Edité par paul64lafourcade 12 avril 2017 à 18:56:46

                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 avril 2017 à 11:16:50

                    *Sors la table de massage pour kets14*

                    "allez allez, on se détends"

                    :D

                    ++

                    -
                    Edité par christouphe 13 avril 2017 à 11:17:04

                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 avril 2017 à 12:09:57

                      Je suis totalement zen christouphe :D

                      corige moi si je me trompe mais tu veux faire un classement sur des joueur précis ?

                      Si c'est bien le cas deja tu peux faire un foreach sur ton tableau $player plutot que ton while avec ton compteur.

                      Ce qui m'améne a une autre question ! Est ce que tout tes joueur que tu veux classer font partie du même clan ?

                      Car si c'est le cas c'est ce tableau que tu devrais récupérer

                      {
                        "tag": "string",
                        "name": "string",
                        "location": {
                          "id": 0,
                          "name": "string",
                          "isCountry": true
                        },
                        "badgeUrls": {
                          "small": "string",
                          "large": "string",
                          "medium": "string"
                        },
                        "clanLevel": 0,
                        "clanPoints": 0,
                        "members": 0,
                        "type": "string",
                        "requiredTrophies": 0,
                        "warFrequency": "string",
                        "warWinStreak": 0,
                        "warWins": 0,
                        "warTies": 0,
                        "warLosses": 0,
                        "isWarLogPublic": true,
                        "description": "string",
                        "memberList": [
                          {
                            "tag": "string",
                            "name": "string",
                            "expLevel": 0,
                            "league": {
                              "id": 0,
                              "name": "string",
                              "iconUrls": {
                                "small": "string",
                                "large": "string",
                                "medium": "string"
                              }
                            },
                            "trophies": 0,
                            "role": "string",
                            "clanRank": 0,
                            "previousClanRank": 0,
                            "donations": 0,
                            "donationsReceived": 0
                          }
                        ]
                      }

                      Je n'ai pas testé donc je reste dans la théorie mais je ne pense pas trop me tromper en disant que dans memberlist tu devrais recupérer tout les membre du clan en une seul fois et qu'il ni aurait plus aprés qu'à trier sur explevel de chaque membre plutot que d'acceder 22 fois a l'api dans ta boucle (ce qui va ralentir l'écécution de ton script) tu n'a plus qu'une connexion a l'api a avoir

                      -
                      Edité par kets14 13 avril 2017 à 12:16:09

                      • Partager sur Facebook
                      • Partager sur Twitter
                      "Il est hélas devenu évident aujourd’hui que notre technologie a dépassé notre humanité"  A.E.
                        13 avril 2017 à 23:04:03

                        Non malheuresement, les joueurs sont dans des clans différents et ils ont meme tendance a changer de clans souvent...

                        On ne peut donc pas faire comme ca malheuresement meme si comme tu le dis ca serait plus facile.

                        Le foreach pourrait en effet etre pas mal, mais je me demandais si on pourrait pas modifier le $data pour en faire un array multidimentionnel, ainsi on pourrait avoir data[nom du joueur][différentes variables];

                        ainsi on aurait directement notre array et on aurait pas a transferer le $data dans un autre array

                        -
                        Edité par paul64lafourcade 14 avril 2017 à 11:59:31

                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 avril 2017 à 12:11:30

                          Etant donné que je n'ai toujours pas réussit a résoudre ce problème, je vais reposer la question:

                          Je possede une boucle qui tourne 20 fois qui me donne 20 fois $data[] mais avec des résultats différents.

                          Comment pourrais-je récupérer tous ces $data[] et ensuite comment pourrais-je les classer par rapport a chaques $data['expLevel'].

                          Merci beaucoup

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 avril 2017 à 14:43:26

                            Désolé, je t'ai un peu zappé mais a ma décharge j'aide une dizaine de membre chaque jour ! que penserai tu de passer par une base de données pour automatisé ton code ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            "Il est hélas devenu évident aujourd’hui que notre technologie a dépassé notre humanité"  A.E.
                              20 avril 2017 à 16:13:11

                              kets14 a écrit:

                              Désolé, je t'ai un peu zappé mais a ma décharge j'aide une dizaine de membre chaque jour ! que penserai tu de passer par une base de données pour automatisé ton code ?


                              Salut, pas de problemes, je comprend tout a fait.

                              Je n'ai pas suffisament de connaissances en base de données pour le moment. De toute facon, étant donné que je recupère le $data d'une api, je sais pas trop comment on aurait pu faire.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 mai 2017 à 23:43:22

                                J'ai toujours pas réglé ce truc et je continue donc a update le classement manuellement tous les 3 jours xD
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 mai 2017 à 15:49:29

                                  J'ai vraiment besoin d'aide !

                                  Bon, je veux mettre des array dans un autre array qu'on puisse ensuite classer, je sais que je réussirais jamais a résoudre ce truc entierement mais si quelqu'un pourrait m'aider un poil ca serait génial !

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 mai 2017 à 16:17:07

                                    Coucou,

                                    je viens de voir que ton soucis n'était toujours pas réglé, du coup, pour repartir sur de "bonne" base, peux-tu nous mettre le code complet (récupération des données, traitement, affichage, ..) que tu as pour l'instant ?

                                    Merci =)

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      19 mai 2017 à 17:10:22

                                      YoshiiSenpai a écrit:

                                      Coucou,

                                      je viens de voir que ton soucis n'était toujours pas réglé, du coup, pour repartir sur de "bonne" base, peux-tu nous mettre le code complet (récupération des données, traitement, affichage, ..) que tu as pour l'instant ?

                                      Merci =)

                                      C'est tres tres salle comme code mais voila:

                                      <!DOCTYPE html>
                                      <html>
                                      <head>
                                      	<link rel="icon" type="image/png" href="hdv2.png" />
                                          <meta charset="utf-8" />
                                      	<!--[if lt IE 9]>
                                      	<script src="http://github.com/aFarkas/html5shiv/blob/master/dist/html5shiv.js"></script>
                                      	<![endif]-->
                                      	<link rel="stylesheet" href="lowdonators.css" />
                                          <title>Low Donators - TH 2 but huge level</title>
                                      	
                                      </head>
                                      
                                      <body>
                                      <header>
                                      	<!-- <h1 class="title">Low Donators</h1> -->
                                      	<a href="index.php"><img src="logo.png" alt="Low Donators Website" class="title" /></a> 
                                      </header>
                                      
                                      <!--TH2 -->
                                      
                                      <div class='carre'>
                                      <img src="hdv2.png" id="hdv" />
                                      <h3>LEADERBOARD OF THE BEST TH2 LEVELS :</h3>
                                      	<p id="attention">The levels are updated automaticly but not the order so message me at @arcree_coc on Instagram if something is false !</p>
                                      	<!-- <p>n1 doesn't want to be shown here</p> -->
                                      <?php
                                      	$player[1] = "#9QC8LC9VV"; //iOS Bot - T2
                                      	$player[2] = "#9CP9YCJ8U"; //rh2 donator
                                      	$player[3] = '#9UCL00YQL'; //qqqqqqqqqqqqqqq
                                      	$player[4] = "#9CGGCRGQY"; //Mystic th 2
                                      	$player[5] = "#9RCCPGUPC"; //WOKBYY-TH2
                                      	$player[6] = '#9VGQYGQ9R'; //Town Moonk
                                      	$player[7] = '#99CY9RCU0'; //ninja Th2
                                      	$player[8] = '#9RP20LJ0P'; //ArcreeLvlUp Th2
                                      	$player[9] = '#9V9099GG8'; //THE_NORTH_FACE
                                      	$player[10] = '#P8CCPR2PY'; //Isaiah
                                      	$player[11] = "#99CRUCPRQ"; //Lori's TH2
                                      	$player[12] = '#9RJQPJQQG'; //TH2 General 2
                                      	$player[13] = '#9VVGYJLQ9'; //TH2 GOD
                                      	$player[14] = '#9JU9P9R8R'; //zoel em
                                      	$player[15] = "#9YG2G89VJ"; //Kiddo Has Th2?
                                      	
                                      	
                                      	
                                      	$previous = 700;
                                      	$whileTest = 1;
                                      	while($whileTest <= 15) {
                                      	$token = "apparement il faut pas la donner";
                                      
                                      	$playertag = $player[$whileTest];
                                      		
                                      	$url = "https://api.clashofclans.com/v1/players/" . urlencode($playertag);
                                      
                                      	$ch = curl_init($url);
                                      		
                                      	$headr = array();
                                      	$headr[] = "Accept: application/json";
                                      	$headr[] = "Authorization: Bearer ".$token;
                                      
                                      	curl_setopt($ch, CURLOPT_HTTPHEADER, $headr);
                                      	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
                                      	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                                      	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                                      
                                      	$res = curl_exec($ch);
                                      	$data = json_decode($res, true);
                                      	curl_close($ch);
                                      	$playerTag = $data['tag'];
                                      	$playerTag = substr($playerTag, 1);
                                      	if($data['townHallLevel'] > 3 || $data["expLevel"] > $previous) {
                                      		?><a href='player.php?tag=<?php echo $playerTag; ?>' target="_blank" id="players" ><p style="color:red;"><?php echo $whileTest ?> - [TH<?php echo $data["townHallLevel"]; ?>] <?php echo $data["name"]; ?> (<?php echo $data["tag"]; ?>) : <?php echo $data["expLevel"]; ?></p></a><?php
                                      	}
                                      	else {
                                      		?><a href='player.php?tag=<?php echo $playerTag; ?>' target="_blank" id="players" ><p><?php echo $whileTest ?> - [TH<?php echo $data["townHallLevel"]; ?>] <?php echo $data["name"]; ?> (<?php echo $data["tag"]; ?>) : <?php echo $data["expLevel"]; ?></p></a><?php
                                      	}
                                      	
                                      	$previous = $data["expLevel"];
                                      	$whileTest++;
                                      	}
                                      	?>
                                      	<p>If you know a TH2 Level 35+ who is not on this list, send me a message at @arcree_coc or @lowdonators on instagram</p>
                                      </div>
                                      
                                      </body>
                                      </html>


                                      Comme tu le vois (si tu comprends ce bordel), ca fait un classement que je met a jour en changant les id de joueurs d'ordre.

                                      J'aimerais que cet ordre soit automatique.

                                      Le site est www.lowdonators.ml/Th2.php (c'est moche)

                                      -
                                      Edité par paul64lafourcade 19 mai 2017 à 17:11:51

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 mai 2017 à 2:27:50

                                        Re,

                                        du coup, j'ai regarder un peu l'api pour voir comment celle-ci fonctionne (ce à quoi faisait référence kets14 au passage).

                                        Partant de là, si j'ai "bien" compris ce que tu aimerais faire, c'est trier en fonction de "townHallLevel" ?

                                        J'ai donc commencer par faire un peu de "nettoyage" dans le code, et j'obtiens donc ceci :

                                        <?php
                                          /**
                                           * Identifiants des joueurs
                                           */
                                          $playersId = [
                                            "9QC8LC9VV",  // iOS Bot - T2
                                            "9CP9YCJ8U",  // rh2 donator
                                            "9UCL00YQL",  // qqqqqqqqqqqqqqq
                                            "9CGGCRGQY",  // Mystic th 2
                                            "9RCCPGUPC",  // WOKBYY-TH2
                                            "9VGQYGQ9R",  // Town Moonk
                                            "99CY9RCU0",  // ninja Th2
                                            "9RP20LJ0P",  // ArcreeLvlUp Th2
                                            "9V9099GG8",  // THE_NORTH_FACE
                                            "P8CCPR2PY",  // Isaiah
                                            "99CRUCPRQ",  // Lori's TH2
                                            "9RJQPJQQG",  // TH2 General 2
                                            "9VVGYJLQ9",  // TH2 GOD
                                            "9JU9P9R8R",  // zoel em
                                            "9YG2G89VJ",  // Kiddo Has Th2?
                                          ];
                                        
                                          /**
                                           * Récupération des données
                                           */
                                          $token  = "TON TOKEN";
                                          $baseUrl = "https://api.clashofclans.com/v1/players/";
                                        
                                          $playersData = [];
                                          foreach( $playersId as $playerId ){
                                            $ch = curl_init($baseUrl.urlencode("#".$playerId));
                                        
                                            curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/json", "Authorization: Bearer ".$token]);
                                            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
                                            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                                            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                                        
                                            $response = curl_exec($ch);
                                            if( curl_getinfo($ch, CURLINFO_HTTP_CODE) == "200" ){
                                              $data = json_decode($response, true);
                                        
                                              $playersData[] = [
                                                "tag"           => substr($data["tag"], 1),
                                                "townHallLevel" => $data['townHallLevel'],
                                                "expLevel"      => $data["expLevel"],
                                                "name"          => $data["name"],
                                              ];
                                            }
                                        
                                            curl_close($ch);
                                          }
                                        
                                          /**
                                           * Tri des données des joueurs
                                           */
                                        
                                          // A FAIRE
                                        
                                          /**
                                           * Affichage des données
                                           */
                                          $i = 1;
                                          foreach( $playersData as $player ){
                                            // Choix de la couleur du texte
                                            $color = "";
                                            if($player['townHallLevel'] > 3){
                                              $color = "style='color:red;'";
                                            }
                                            ?>
                                        
                                            <!-- Affichage des données -->
                                            <a href='player.php?tag=<?= $player['tag'] ?>' target="_blank" id="players" >
                                              <p <?= $color ?>>
                                                <?= $i ?> - [TH<?= $player["townHallLevel"] ?>] <?= $player["name"] ?> (<?= $player["tag"] ?>) : <?= $player["expLevel"] ?>
                                              </p>
                                            </a>
                                        
                                            <?php
                                            $i++;
                                          }
                                        ?>

                                        Comme tu peux le voir, j'ai simplement "organisé" en plusieurs parties : Définition des identifiants, récupération des données, tri des données, affichage.

                                        Maintenant, j'ai supprimé la partie concernant le tri pour te laisser y réfléchir. Le code est très simple, et comme je te l'ai dis dans mon premier message, si tu veux faire un tri d'un tableau multi-dimensionnel, une fonction très pratique pour cela, c'est usort().

                                        Voilà, si tu à encore un soucis, n'hésite pas =)

                                        -
                                        Edité par YoshiiSenpai 20 mai 2017 à 2:35:09

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 mai 2017 à 14:15:35

                                          Salut, je veux trier avec expLevel et pas townHallLevel

                                          Un énorme merci pour tout ce que tu as fait !

                                          Le tris avec le townHallLevel me permettait juste de savoir si le niveau du townhall avait changé plus facilement, c'était rien de très important !

                                          J'enleve aussi le premier caractère de $data['tag'] pour pouvoir envoyer le tag par url sachant que le premier caractère est toujours #

                                          Je vais maintenant essayer de comprendre tout ca et faire le classement

                                          Apres un peu de recherches, je t'avoues que j'ai un peu de mal a comprendre comment je peux classer a partir de $playersData['expLevel'] d'autant plus que je comprends pas réellement le fait que pour chaque boucle du foreach, un $playersData est créé, il est sensé y avoir plusieurs tableaux avec le meme nom ? C'est un peu compliqué pour moi tous ces tableaux

                                          -
                                          Edité par paul64lafourcade 20 mai 2017 à 14:50:54

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            20 mai 2017 à 16:39:08

                                            Re,

                                            en effet, pardon, j'ai pas mis trop d'explication, je pensais que tu comprendrais, mais je vais essayer de t'expliquer ce que j'ai changé, pour que tu comprennes la "logique" du truc.

                                            <?php
                                            /**
                                             * Identifiants des joueurs
                                             */
                                            // On stock les id des joueurs dans un tableau (le # a été enlevé car il y est toujours)
                                            $playersId = [
                                              "9QC8LC9VV",  // iOS Bot - T2
                                              "9CP9YCJ8U",  // rh2 donator
                                              "9UCL00YQL",  // qqqqqqqqqqqqqqq
                                              "9CGGCRGQY",  // Mystic th 2
                                              "9RCCPGUPC",  // WOKBYY-TH2
                                              "9VGQYGQ9R",  // Town Moonk
                                              "99CY9RCU0",  // ninja Th2
                                              "9RP20LJ0P",  // ArcreeLvlUp Th2
                                              "9V9099GG8",  // THE_NORTH_FACE
                                              "P8CCPR2PY",  // Isaiah
                                              "99CRUCPRQ",  // Lori's TH2
                                              "9RJQPJQQG",  // TH2 General 2
                                              "9VVGYJLQ9",  // TH2 GOD
                                              "9JU9P9R8R",  // zoel em
                                              "9YG2G89VJ",  // Kiddo Has Th2?
                                            ];
                                            
                                            /**
                                             * Récupération des données
                                             */
                                            // On sort les infos "constantes", pas besoin de les redéfinir à chaque itération de la boucle
                                            $token  = "TON TOKEN";
                                            $baseUrl = "https://api.clashofclans.com/v1/players/";
                                            
                                            // Création d'un tableau qui contiendra toutes les données "nécessaire" des joueurs
                                            $playersData = [];
                                            // Boucle pour récupérer les données des joueurs un par un
                                            foreach( $playersId as $playerId ){
                                              // Initialisation de cUrl à partir de l'url "statique" + id du joueur auquel on a ajouté le #
                                              $ch = curl_init($baseUrl.urlencode("#".$playerId));
                                            
                                              // On définit les options pour cUrl
                                              curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/json", "Authorization: Bearer ".$token]);
                                              curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
                                              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                                              curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                                            
                                              // Execution de cUrl
                                              $response = curl_exec($ch);
                                              // Si on a reçu les données voulu
                                              if( curl_getinfo($ch, CURLINFO_HTTP_CODE) == "200" ){
                                                // On décode les données
                                                $data = json_decode($response, true);
                                            
                                                // On stock les données désiré dans un sous-tableau de $playersData
                                                $playersData[] = [
                                                  "tag"           => substr($data["tag"], 1),
                                                  "townHallLevel" => $data['townHallLevel'],
                                                  "expLevel"      => $data["expLevel"],
                                                  "name"          => $data["name"],
                                                ];
                                              }
                                            
                                              // On ferme cUrl
                                              curl_close($ch);
                                            }
                                            
                                            // $playersData contient maintenant un sous tableau pour chaque joueur
                                            // $playersData = [
                                            //   ["tag" => "a", "townHallLevel" => "aa", "expLevel" => "aaa", "name" => "aaaa"],
                                            //   ["tag" => "b", "townHallLevel" => "bb", "expLevel" => "bbb", "name" => "bbbb"],
                                            //   ["tag" => "c", "townHallLevel" => "cc", "expLevel" => "ccc", "name" => "cccc"],
                                            //   ...
                                            // ];
                                            
                                            /**
                                             * Tri des données des joueurs
                                             */
                                            
                                            // A FAIRE
                                            
                                            /**
                                             * Affichage des données
                                             */
                                            // Initialisation du "rang" à afficher
                                            $i = 1;
                                            // Boucle pour afficher les données joueur par joueur
                                            foreach( $playersData as $player ){
                                              // Choix de la couleur du texte
                                              $color = "";
                                              if($player['townHallLevel'] > 3){
                                                $color = "style='color:red;'";
                                              }
                                              ?>
                                            
                                              <!-- Affichage des données -->
                                              <a href='player.php?tag=<?= $player['tag'] ?>' target="_blank" id="players" >
                                                <p <?= $color ?>>
                                                  <?= $i ?> - [TH<?= $player["townHallLevel"] ?>] <?= $player["name"] ?> (<?= $player["tag"] ?>) : <?= $player["expLevel"] ?>
                                                </p>
                                              </a>
                                            
                                              <?php
                                              // Incrémentation du rang
                                              $i++;
                                            }
                                            ?>

                                            Concernant le tri, tu peux le faire sur ce que tu veux, le code ne change pas, tu as juste a bien faire ta fonction de tri.


                                            Après, comme tu as pu le voir, j'ai enlevé tout ce qui concerne ta variable $previous, je n'ai pas compris à quoi elle servait (hormis la couleur, mais tu la défini à 700 au début, ce qui m'a semblé un peu "random"), mais tu peux la remettre bien sûr.

                                            Voilà, j'espère avoir assez détaillé ^^

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 mai 2017 à 16:55:00

                                              Ok merci !


                                              Ma variable previous me permettait de savoir si le classement était bon juste en visitant la page vite fait: Je pouvais tester si le joueur en dessous n'avait pas un plus gros niveau que le joueur en dessus.

                                              Le 700 c'était juste un truc que j'avais mis en fesant des tests et que j'avais oublié d'enlever



                                              J'aimerais te remercier au plus haut point ! J'ai finalement un résultat qui marche et en plus le code entier est 100 fois plus propre !

                                              Voici le code pour le classement:

                                              function classement($un, $deux) {
                                                  if ($un['expLevel'] == $deux['expLevel']) {
                                                      return 0;
                                                  }
                                                  return ($un['expLevel'] < $deux['expLevel']) ? 1 : -1;
                                              }
                                              
                                              usort($playersData,"classement");

                                              -
                                              Edité par paul64lafourcade 20 mai 2017 à 17:22:23

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                20 mai 2017 à 17:33:57

                                                Salut, pourquoi tu n'utilises pas une bdd? ça serait plus simple.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 mai 2017 à 20:26:43

                                                  @paul64lafourcade : Super ! Juste une petite "précision", si je puis me permettre, tu peux faire encore plus court pour ta fonction usort() en utilisant une fonction anonyme (à condition que n'utilise pas ta fonction ailleurs dans ton code), par exemple :

                                                  <?php
                                                  usort($playersData, function($a, $b){
                                                    // TODO
                                                  });
                                                  ?>


                                                  Voilà, c'est tout, rien de bien méchant :p

                                                  @Romuald44 : Utiliser une bdd permettrai de rendre le tri plus facile, mais ça oblige à devoir mettre la base de donnée à jour régulièrement, donc le code complet final devient plus "complexe". Cela serai un "bon" choix si il y avait beaucoup de joueurs à classer, mais pour 15-20, c'est pas vraiment nécessaire.

                                                  Voilà, c'est tout ^^

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Organisation d'un array

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown