Problème avec un tableau

Problème avec un tableau - PHP - Programmation

Marsh Posté le 28-08-2011 à 18:14:47    

Salut :)
 
Voici mon tableau :
 

Code :
  1. [pvp] => stdClass Object
  2.         (
  3.             [arenaTeams] => Array
  4.                 (
  5.                     [0] => stdClass Object
  6.                         (
  7.                             [name] => Ragna nous tuera
  8.                             [personalRating] => 1656
  9.                             [teamRating] => 1655
  10.                             [size] => 2v2
  11.                         )
  12.                     [1] => stdClass Object
  13.                         (
  14.                             [name] => nul en pve nul en pvp
  15.                             [personalRating] => 1835
  16.                             [teamRating] => 1835
  17.                             [size] => 3v3
  18.                         )
  19.                 )
  20.         )


 
Dans la partie "arenaTeams" il se peut qu'il y est 0, 1, 2 ou 3 type différent de "size", soit aucune, soit 2v2, 3v3 ou 5v5.
 
Mon problème est de savoir combien il y en a donc je fais un :
 
$count = count($profile->pvp->arenaTeams);
 
Je souhaite faire une fonction qui récupère les infos de la "size", donc en gros ça serai :
 
get_arena_personalRating($api, '2v2');
 
 
Mais le problème est que je ne sais pas du tout comment faire, j'ai essayé ça :
 

Code :
  1. function get_arena_personalRating($api, $size)
  2. {
  3.     $profile = $api->pull_JSON();
  4.  
  5.     $count = count($profile->pvp->arenaTeams);
  6.  
  7.     if($count > 0)
  8.     {
  9.         for($i = 0; $i < $count; $i++)
  10.         {
  11.             if(isset($profile->pvp->arenaTeams[$i]->size))
  12.             {
  13.                 $personalRating = $profile->pvp->arenaTeams[$i]->personalRating;
  14.                 $teamRating = $profile->pvp->arenaTeams[$i]->teamRating;
  15.                 $size = $profile->pvp->arenaTeams[$i]->size;
  16.             }
  17.         }
  18.     }
  19.  
  20.     else
  21.     {
  22.         $personalRating = 0;
  23.         $teamRating = 0;
  24.     }
  25. }


 
Mais je ne sais pas récupérer les infos correctement, je bloque total, j'comprends rien :(
 
Un peu d'aide ? merci :)


Message édité par Orission le 29-08-2011 à 17:23:24

---------------
“ Un avis d’un homme non avisé ne doit jamais être pris en compte par un homme avisé. ” Jean Plancher, 1810, Taverne « Chez Bonaparte »
Reply

Marsh Posté le 28-08-2011 à 18:14:47   

Reply

Marsh Posté le 28-08-2011 à 21:32:03    

J'ai pas exactement comptris ce que tu veux faire, mais dans ton code en commentaires je vois "$arena->size = '2v2'" par exemple, mais je pense que c'est plutôt "$arena->size == '2v2'" que tu voulais mettre ?
 
En fait tu veux normaliser ton tableau c'est ca ?


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 29-08-2011 à 17:14:55    

Hello,
 
Alors je veux bien t'aider mais moi aussi je ne comprends pas exactement ton problème.
 
Si ton foreach s'execute 6 fois c'est que "$profile = $api->pull_JSON();" renvoit un tableau de 6 résultats non ?
 
Tu as quoi dans ce tableau ?


---------------
Mon Feedback !
Reply

Marsh Posté le 29-08-2011 à 17:23:53    

J'ai corrigé mon post, c'est un peu plus clair.
 
$profile = $api->pull_JSON();
 
S’exécute qu'une seule fois, c'est juste ma classe qui récupère les infos de l'api battle.net

Message cité 1 fois
Message édité par Orission le 29-08-2011 à 17:25:29

---------------
“ Un avis d’un homme non avisé ne doit jamais être pris en compte par un homme avisé. ” Jean Plancher, 1810, Taverne « Chez Bonaparte »
Reply

Marsh Posté le 29-08-2011 à 18:43:09    

Orission a écrit :

$profile = $api->pull_JSON();

 

S’exécute qu'une seule fois, c'est juste ma classe qui récupère les infos de l'api battle.net


Oui ça j'avais bien compris, c'était pas vraiment ça ma question  :o

 

Sinon en effet c'est un peu plus clair.

 

Si je comprends bien ce que tu essayes de faire, tu veux chercher dans $profile ce qui correspond au $size que tu passes en paramètre et renvoyer les informations en question. Dans ce cas ça donnerait je pense quelque chose dans ce genre :

Code :
  1. function get_arena_personalRating($api, $size)
  2. {
  3.    $profile = $api->pull_JSON();
  4.  
  5.    foreach ($profile->pvp->arenaTeams as $team)
  6.    {
  7.        if ($team->size === $size)
  8.        {
  9.            return $team;
  10.        }
  11.    }
  12.  
  13.    return null;
  14. }
 

Et ensuite, là où tu récupères la valeur renvoyée par cet appel de fonction, tu vérifie le résultat :
- Si c'est null quand tu envoies '2v2', c'est que le joueur en question n'a pas d'équipe 2v2.
- Si c'est une instance de stdClass, c'est qu'il a une équipe 2v2 et tu peux accéder à sa côte personnelle et d'équipe via les propriété publiques "personalRating" et "teamRating".

 

Si je suis à côté de la plaque, ce qui est possible, c'est que soit je n'ai pas compris ce que tu veux faire, soit tu ne comprends pas comment tu dois continuer après cette fonction là.  :)

 

Tiens moi au courant !

 

Edit : Après lecture du nom de ta fonction, ça serait plus ça peut-être :

Code :
  1. function get_arena_personalRating($api, $size)
  2. {
  3.    $profile = $api->pull_JSON();
  4.  
  5.    foreach ($profile->pvp->arenaTeams as $team)
  6.    {
  7.        if ($team->size === $size)
  8.        {
  9.            return $team->personalRating;
  10.        }
  11.    }
  12.  
  13.    return null;
  14. }


Message édité par Tirkyth le 29-08-2011 à 18:45:38

---------------
Mon Feedback !
Reply

Marsh Posté le 29-08-2011 à 19:15:12    

Code :
  1. function get_arena_personalRating($api, $size)
  2. {
  3.     $profile = $api->pull_JSON();
  4.  
  5.     foreach($profile->pvp->arenaTeams as $team)
  6.     {
  7.     p($team);
  8.         if($team->size === $size)
  9.             return $team->personalRating;
  10.  
  11.         else
  12.             return 0;
  13.     }
  14.  
  15.     return null;
  16. }


 
 
Donc j'affiche cela :
 

Code :
  1. echo '2v2 - '.get_arena_personalRating($api, '2v2').'<br />';
  2. echo '3v3 - '.get_arena_personalRating($api, '3v3').'<br />';
  3. echo '5v5 - '.get_arena_personalRating($api, '5v5');


 
 
Et ça me donne :
 

Code :
  1. stdClass Object
  2. (
  3.    [name] => Ragna nous tuera
  4.    [personalRating] => 1656
  5.    [teamRating] => 1655
  6.    [size] => 2v2
  7. )
  8.  
  9. 2v2 - 1656
  10.  
  11. stdClass Object
  12. (
  13.    [name] => Ragna nous tuera
  14.    [personalRating] => 1656
  15.    [teamRating] => 1655
  16.    [size] => 2v2
  17. )
  18.  
  19. 3v3 - 0
  20.  
  21. stdClass Object
  22. (
  23.    [name] => Ragna nous tuera
  24.    [personalRating] => 1656
  25.    [teamRating] => 1655
  26.    [size] => 2v2
  27. )
  28.  
  29. 5v5 - 0


 
Je ne comprends pas. En fait c'est ça qui me bloque depuis le début, j'ai beau faire des codes différents, et j'ai toujours le même bug :(


Message édité par Orission le 29-08-2011 à 20:17:48

---------------
“ Un avis d’un homme non avisé ne doit jamais être pris en compte par un homme avisé. ” Jean Plancher, 1810, Taverne « Chez Bonaparte »
Reply

Marsh Posté le 30-08-2011 à 12:00:37    

Je viens de faire un test avec ce script là précisément :
 

Code :
  1. <?php
  2.  
  3. class Api
  4. {
  5.    public function pull_JSON()
  6.    {
  7.        $team2v2 = new stdClass();
  8.        $team2v2->name = 'Ragna nous tuera';
  9.        $team2v2->personalRating = 1656;
  10.        $team2v2->teamRating = 1656;
  11.        $team2v2->size = '2v2';
  12.  
  13.        $team3v3 = new stdClass();
  14.        $team3v3->name = 'nul en pve nul en pvp';
  15.        $team3v3->personalRating = 1835;
  16.        $team3v3->teamRating = 1835;
  17.        $team3v3->size = '3v3';
  18.  
  19.        $profile = new stdClass();
  20.        $profile->pvp = new stdClass();
  21.        $profile->pvp->arenaTeams = array(
  22.            $team2v2,
  23.            $team3v3,
  24.        );
  25.  
  26.        return $profile;
  27.    }
  28. }
  29.  
  30. function get_arena_personalRating($api, $size)
  31. {
  32.    $profile = $api->pull_JSON();
  33.  
  34.    foreach ($profile->pvp->arenaTeams as $team)
  35.    {
  36.        if ($team->size === $size)
  37.        {
  38.            return $team->personalRating;
  39.        }
  40.    }
  41.  
  42.    return 0;
  43. }
  44.  
  45. $api = new Api();
  46.  
  47. echo '2v2 - '.get_arena_personalRating($api, '2v2').'<br />';
  48. echo '3v3 - '.get_arena_personalRating($api, '3v3').'<br />';
  49. echo '5v5 - '.get_arena_personalRating($api, '5v5');


 
J'obtiens comme résultat :

Code :
  1. 2v2 - 1656
  2. 3v3 - 1835
  3. 5v5 - 0


 
Sachant que la classe Api ne sert qu'à mocker ton $api afin qu'elle me renvoit le même tableau que tu indiques dans ton premier post. La fonction renvoit bien les bons résultats. Donc le code que je t'ai donné est parfaitement valide selon moi.  :o  
Je vois mal comment je vais pouvoir t'aider plus que ça :spamafote:


---------------
Mon Feedback !
Reply

Marsh Posté le 30-08-2011 à 15:19:24    

La classe API je l'ai :
 
http://www.rezman.org/source/?b
 
La function pull_JSON aussi.
 
Les name, rating et le reste changent tout le temps, car je parse une base de donnée d'environ 500.000 joueurs :/
 
Moi ce que je ne comprends pas, c'est que le code précédent est parfaitement logique, clair mais ne me renvoie pas les résultats voulut :(


---------------
“ Un avis d’un homme non avisé ne doit jamais être pris en compte par un homme avisé. ” Jean Plancher, 1810, Taverne « Chez Bonaparte »
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed