[RESOLU] Lost in array...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Lost in array...

Re: Lost in array...

par archeo » 04 mai 2019, 19:12

Merci pour l'explication ;)

Re: Lost in array...

par or 1 » 04 mai 2019, 19:01

$value->licence
c'est pour accéder à un champ d'un objet.
là, ce n'est pas un objet mais un tableau.

Re: Lost in array...

par archeo » 04 mai 2019, 18:05

Effectivement, ça fonctionne ! Merci @or1 =D>

Histoire de comprendre, c'est quoi la subtilité entre ce que j'avais écrit et cette solution ?

Re: Lost in array...

par or 1 » 04 mai 2019, 17:56

$licence=$value['licence'];

Lost in array...

par archeo » 04 mai 2019, 17:37

Bonjour à tous,

Si j'ai quelques notions en PHP, je pars d'assez loin concernant les tableaux et leur exploitation, d'où mon appel à l'aide.

Dans le sport que je pratique, la fédération met à disposition un certain nombre de données dont la récupération se fait au format XML.
Dans l'exemple qui m'intéresse, la récupération de la liste des licenciés d'un club, je débute par ces informations :
$result = connexionAPI('xml_liste_joueur', 'club=03350119');
$licencies = simplexml_load_string($result);
A l'aide d'un print_r, je suis en mesure d'afficher les données :
SimpleXMLElement Object
(
    [joueur] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [licence] => 5010505
                    [nom] => CHERON
                    [prenom] => Anthony
                    [club] => BAILLE CLUB SPORTIF
                    [nclub] => 03350119
                    [clast] => 7
                )

            [1] => SimpleXMLElement Object
                (
                    [licence] => 3516685
                    [nom] => HURAUX
                    [prenom] => Alexandre
                    [club] => BAILLE CLUB SPORTIF
                    [nclub] => 03350119
                    [clast] => 9
                )

            [2] => SimpleXMLElement Object
                (
                    [licence] => 509003
                    [nom] => MOREL
                    [prenom] => Stéphane
                    [club] => BAILLE CLUB SPORTIF
                    [nclub] => 03350119
                    [clast] => 8
                )

            [3] => SimpleXMLElement Object
                (
                    [licence] => 3522788
                    [nom] => RESTOUX
                    [prenom] => Sylvain
                    [club] => BAILLE CLUB SPORTIF
                    [nclub] => 03350119
                    [clast] => 8
                )

        )

)
Si je souhaite afficher ces données sous forme de tableau [table] [/table], aucun souci.

Cependant, je voudrais pouvoir trier les données suivant le champ de mon choix, la licence ou le prénom par exemple. Pour se faire, j'ai été obligé de passer d'un tableau SimpleXMLElement Object à un tableau plus "classique". J'y suis arrivé avec la commande suivante :
$licencies2 = json_decode(json_encode((array) simplexml_load_string($result)),1);
A nouveau, avec un print_r, ça me donne ça :
Array
(
    [joueur] => Array
        (
            [0] => Array
                (
                    [licence] => 5010505
                    [nom] => CHERON
                    [prenom] => Anthony
                    [club] => BAILLE CLUB SPORTIF
                    [nclub] => 03350119
                    [clast] => 7
                )

            [1] => Array
                (
                    [licence] => 3516685
                    [nom] => HURAUX
                    [prenom] => Alexandre
                    [club] => BAILLE CLUB SPORTIF
                    [nclub] => 03350119
                    [clast] => 9
                )

            [2] => Array
                (
                    [licence] => 509003
                    [nom] => MOREL
                    [prenom] => Stéphane
                    [club] => BAILLE CLUB SPORTIF
                    [nclub] => 03350119
                    [clast] => 8
                )

            [3] => Array
                (
                    [licence] => 3522788
                    [nom] => RESTOUX
                    [prenom] => Sylvain
                    [club] => BAILLE CLUB SPORTIF
                    [nclub] => 03350119
                    [clast] => 8
                )

        )

)
C'est "presque" bien sauf qu'il y a comme un array ([joueur]) dans mon array. Nouveau bricolage avec :
$resultat2 = $licencies2["joueur"];
et toujours le print_r qui va bien :
Array
(
    [0] => Array
        (
            [licence] => 5010505
            [nom] => CHERON
            [prenom] => Anthony
            [club] => BAILLE CLUB SPORTIF
            [nclub] => 03350119
            [clast] => 7
        )

    [1] => Array
        (
            [licence] => 3516685
            [nom] => HURAUX
            [prenom] => Alexandre
            [club] => BAILLE CLUB SPORTIF
            [nclub] => 03350119
            [clast] => 9
        )

    [2] => Array
        (
            [licence] => 509003
            [nom] => MOREL
            [prenom] => Stéphane
            [club] => BAILLE CLUB SPORTIF
            [nclub] => 03350119
            [clast] => 8
        )

    [3] => Array
        (
            [licence] => 3522788
            [nom] => RESTOUX
            [prenom] => Sylvain
            [club] => BAILLE CLUB SPORTIF
            [nclub] => 03350119
            [clast] => 8
        )

)
Là, j'ai un tableau que je vais qualifier de "normal" par rapport à ce que j'ai pu lire ça et là dans différents tuto. Je décide ensuite de trier les données en fonction du champ [clast] à l'aide de cette fonction :
function compare($a, $b) {
  if($a["clast"] == $b["clast"])
    return 0;
  return $a["clast"] > $b["clast"] ? 1 : -1;
}
J'applique ensuite le tri en question sur mon dernier tableau :
usort($resultat2, compare);
Et le print_r me donne effectivement l'array trié selon le champ [clast]
Array
(
    [0] => Array
        (
            [licence] => 5010505
            [nom] => CHERON
            [prenom] => Anthony
            [club] => BAILLE CLUB SPORTIF
            [nclub] => 03350119
            [clast] => 7
        )

    [1] => Array
        (
            [licence] => 509003
            [nom] => MOREL
            [prenom] => Stéphane
            [club] => BAILLE CLUB SPORTIF
            [nclub] => 03350119
            [clast] => 8
        )

    [2] => Array
        (
            [licence] => 3522788
            [nom] => RESTOUX
            [prenom] => Sylvain
            [club] => BAILLE CLUB SPORTIF
            [nclub] => 03350119
            [clast] => 8
        )

    [3] => Array
        (
            [licence] => 3516685
            [nom] => HURAUX
            [prenom] => Alexandre
            [club] => BAILLE CLUB SPORTIF
            [nclub] => 03350119
            [clast] => 9
        )

)
Après cette longue introduction, j'en arrive à mon problème. Ce tableau $resultat2 trié comme je l'ai décidé et bien je ne suis pas en mesure de l'afficher correctement :?

J'essaye d'afficher les données, simplement, avec les commandes suivantes :
 foreach($resultat2 as $value)	{
        $licence=$value->licence;
        $nom=$value->nom;
        $prenom=$value->prenom;
        $clast=$value->clast;
        echo $licence.' - '.$nom.' - '.$prenom.' - '.$clast;
        echo '<br />';
    }
Et rien de s'affiche :(

Il y a forcément une étape que j'ai sauté ou une utilisation du code qui est erronée mais je ne trouve pas d'où ça vient. J'espère donc que vous pourrez m'apporter votre aide. Merci d'avance :wink: