Trier un array json

Eléphant du PHP | 233 Messages

18 janv. 2019, 19:21

Bonsoir à tous,

je voudrais trier le résultat de ma requête retournée en json par le nom de la ville et pas par l'id
J'ai fait dans ma requête un ORDER BY ville ASC mais le tri est toujours avec l'id de la ville.
J'ai également essayé avec usort($json = array()); mais pas de changement.
Comment je peux faire un tri sur la ville :?:

if(isset($_GET['departement'])) {
	
	// connexion à la base de données
    require 'config.inc.php'; 
	
   $json = array();
	
	$req = $bdd->prepare("SELECT ville, cp, id_ville FROM ville WHERE id_departement = :id_departement ORDER BY ville ASC");
	$req->execute(array(
		'id_departement' => $_GET['departement']
	));
					
	while ($dpt = $req->fetch()) {
	  $json[$dpt['id_ville']] = utf8_encode($dpt['ville']. " (".($dpt['cp'].")"));

	}
	
    // envoi du résultat au success
    echo json_encode($json);
}
Merci
Je me suis trompé de catégorie, merci au webmaster de déplacer ce sujet dans Json #-o

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 janv. 2019, 01:57

C'est curieux que ton ORDER BY en fonctionne pas.
Tu as testée ta requête dans phpmyadmin ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 233 Messages

22 janv. 2019, 11:08

je n'ai jamais fait cette procédure

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 janv. 2019, 11:14

je n'ai jamais fait cette procédure
Et bien c'est l'occasion de s'y mettre !

Il existe tout un tas de tuto sur phmyadmin, en voilà un :
https://openclassrooms.com/fr/courses/9 ... phpmyadmin
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 233 Messages

22 janv. 2019, 11:24

je viens de le faire, j'avais jamais fait ça : dans SQL de mon phpmyadmin j'ai ait ceci en remplaçant $_GET['id_departement'] par 01

SELECT id_ville, ville FROM ville WHERE id_departement = 01 ORDER BY ville DESC

Le tri est bien par le nom de la ville et pas par l'id_ville

j'ajoute le code utilisé pour la récupération du json on ne sait jamais :

<script>
$(document).ready(function() {
    var $ville = $('#ville');
    var $departement = $('#id_departement');


       // à la sélection d une région dans la liste
    $departement.on('change', function() {
        var val = $(this).val(); // on récupère la valeur de la departement


        if(val != '') {
            $ville.empty(); // on vide la liste des ville


            $.ajax({
                url: 'SearchAJAXresult.php',
                data: 'id_departement='+ val, // on envoie $_GET['departement']
                dataType: 'json',
                success: function(json) {
                    $.each(json, function(index, value) {
                        $ville.append('<option value="'+ index +'">'+ value +'</option>');
                    });
                }
            });
        }
    });
});
</script>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 janv. 2019, 11:50

Ok donc ta requête te renvoie bien les infos correctement triées.

Fais des var_dump() de tes variables pour savoir à quel moment tu perds le tri.
Peut être est-ce au moment du json_encode() vu que tu utilises id_ville en clé de ton tableau $json... mais à vérifier
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 233 Messages

22 janv. 2019, 12:12

Le problème c'est que je ne peux pas mettre autre chose que id_ville dans mon tableau, sinon rien ne s'affiche. C'est ça que je trouve bizarre...

 $json[$matiere['ville']] = utf8_encode($matiere['ville']);

ensuite var_dump(); dans le fichier SearchAjaxresult.php plus rien ne s'affiche

Eléphant du PHP | 233 Messages

22 janv. 2019, 13:05

J'ai fait var_dump($sql); directement en appelant SearchAjaxresult.php dans la barre de navigation en remplaçant $_GET['id_departement'] par un chiffre, le tri d'effectue bien aussi bien en ASC que DESC

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 janv. 2019, 21:08

Que donne un var_dump($json), et un var_dump(json_encode($json)); ?
Toujours dans le bon ordre ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 233 Messages

23 janv. 2019, 11:16

Bonjour,

var_dump($json); tri conforme en ASC et DESC et donne : "Violès" [24212]=> string(16)
var_dump(json_encode($json); tri également conforme et donne : "Viol\u00e8s","24212"

Le script associé ça ne serait pas lui par hasard ?

https://code.jquery.com/jquery-1.10.2.js