Trier des données résultant d'une API Json

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 : Trier des données résultant d'une API Json

Re: Trier des données résultant d'une API Json

par michel47 » 27 mai 2021, 14:14

en faisant le

Code : Tout sélectionner

var_dump($parsedAPI);
ou une capture d'écran graphique ?

Re: Trier des données résultant d'une API Json

par Ryle » 27 mai 2021, 13:14

Peux-tu nous poster un extrait de ce que retourne l'api afin que l'on puisse voir comment est structuré ton tableau ?

Re: Trier des données résultant d'une API Json

par michel47 » 26 mai 2021, 19:15

j'ai essayé le code, je n'ai plus de message d erreur. le tableau est revenu à l'état initial (c'est a dire non-trié)

Re: Trier des données résultant d'une API Json

par Ryle » 26 mai 2021, 19:05

C'est étonnant que tu ais ce message d'erreur sur le array_multisort() et pas sur le array_column() alors que c'est le même tableau qui passé en paramètre... Mais c'est peut être parce que c'est un sous-tableau que le multisort() ne fonctionne pas et génère une erreur.

En fait, quand tu décodes ton flux json, le fait de passer le second paramètre à true, a pour effet de le transformer l'objet json reçu en tableau associatif qui est affecté à ta variable $parsedAPI. Tu peux faire un var_dump ou un print_r($parsedAPI) pour le constater.

Tu verras également la structure de ton tableau et les indexes utilisés. D'après le code que tu as donné, tu devrais trouver un index nommé 'tableau', sous lequel il y a une liste de tableaux (sur laquelle tu fais le foreach pour les parcourir un par un), et dans chacun de ces tableaux tu vas retrouver un index 'data1' avec la valeur correspondante, un index 'data2' avec sa valeur, etc.

L'objectif de array_column() ici est de te récupérer la liste des valeurs de chaque "data1" présents dans ton tableau afin de pouvoir les utiliser pour trier tout le tableau :)

Essaies de sortir le tableau dans une variable avant de le trier et dis nous si tu as toujours l'erreur (et si ça répond à ton besoin ;))
$parsedAPI = json_decode($api, true);
$table = $parsedAPI['tableau'];
$keys = array_column($table, 'data1');
array_multisort($keys, SORT_ASC, $table);
foreach ($table as $datas) {
...

Re: Trier des données résultant d'une API Json

par michel47 » 26 mai 2021, 17:39

Il m'a mis un gros message d'erreur
Fatal error: Uncaught TypeError: array_multisort(): Argument #3 must be an array or a sort flag in C:\xampp\htdocs\sitesweb\classement.php:16 Stack trace: #0 C:\xampp\htdocs\sitesweb\classement.php(16): array_multisort(Array, 4, NULL) #1 {main} thrown in C:\xampp\htdocs\sitesweb\classement.php on line 16

En fait ce que je ne comprends pas c'est le data1 du $keys = array_column($parsedAPI['tableau'], 'data1');
le data1 n'est récupéré que dans le foreach non ?
Il faut que je garde le $assoc=true que j'avais mis (et qui ne doit pas être bon) ?

En gros le code complet donnerait ça ?

Code : Tout sélectionner

<?php $api = file_get_contents("ici le lien vers les données de l'API"); $parsedAPI = json_decode($api, $assoc=true); $keys = array_column($parsedAPI['tableau'], 'data1'); array_multisort($keys, SORT_ASC, $parsedAPI['tableau']); foreach ($parsedAPI['tableau'] as $datas) { $mavariable1=$datas ['data1']; $mavariable2=$datas['data2']; $mavariable3=$datas['data3']; $mavariable4=$datas['data4']; et ici le code pour afficher mes variables } ?>

Re: Trier des données résultant d'une API Json

par Ryle » 26 mai 2021, 17:15

Une fois ton flux récupéré et décodé, il semble que ta variable $parsedAPI['tableau'] soit justement un tableau (sans quoi tu ne pourrais pas faire de foreach pour en parcourir les éléments :)). C'est donc ce tableau qu'il te faut isoler et trier avant de le parcourir avec le foreach.

La difficulté pour le trier vient du fait qu'il s'agit visiblement d'un tableau à plusieurs dimensions et que tu veux le trier en fonction de la valeur de la colonne data1. Comme l'a suggéré @rthur, tu peux pour cela utiliser array_multisort() en récupérant les valeurs de data1 avec array_column() (.
$keys = array_column($parsedAPI['tableau'], 'data1');
array_multisort($keys, SORT_ASC, $parsedAPI['tableau']);
Cela devrait permettre d'indexer ton tableau (et donc permettre de le trier) en fonction des valeurs qu'il contient :)

Re: Trier des données résultant d'une API Json

par michel47 » 26 mai 2021, 16:38

Merci pour ta réponse.
En fait mon tableau est un classement sportif
la 1ere colonne c est le rang
la 2e colonne l'équipe
la 3e colonne le nombre de points
la 4eme le nombre de matchs
En fait le problème vient de l'API (qui n'a pas fait le tri et comme ils ne répondent pas quand je les contacte, je souhaite faire le tri moi-même (et donc faire le tri sur la colonne "rang"

J'ai essayé ceci

Code : Tout sélectionner

$api = file_get_contents("ici le lien vers les données de l'API"); $parsedAPI = json_decode($api, $assoc=true); sort($parsedAPI);
Mais ça ne fonctionne évidemment pas (déjà j'imagine qu'il faut lui indiquer sur quelle colonne faire le tri)

Re: Trier des données résultant d'une API Json

par @rthur » 15 mai 2021, 11:36

Je ne suis pas sûr de comprendre comment ton tableau est constitué, mais regarde peut-être du côté de la fonction array_multisort()

Trier des données résultant d'une API Json

par michel47 » 15 mai 2021, 04:39

Bonsoir,
J'utilise une API au format json.
Je passe donc par un json_decode afin de pouvoir faire une boucle foreach.
Cette boucle foreach créé un tableau a 4 colonnes
Mon code est fait comme ceci

Code : Tout sélectionner

<?php $api = file_get_contents("ici le lien vers les données de l'API"); $parsedAPI = json_decode($api,true); foreach ($parsedAPI['tableau'] as $datas) { $mavariable1=$datas ['data1']; $mavariable2=$datas['data2']; $mavariable3=$datas['data3']; $mavariable4=$datas['data4']; et ici le code pour afficher mes variables } ?>
Mon problème c'est que je souhaite faire un tri avec la fonction sort() la première colonne du tableau (donc sur la variable $mavariable1) et cette fonction n'est disponible que pour un array visiblement.
Comment faire pour pouvoir faire ce tri ?
Est t-il possible de transformer un json_decode en array ?
Faut t-il faire le tri dans la boucle foreach ?
je suis un peu perdu
Merci