Trier un tableau multidimensionnel selon 2 colonnes

Résolu/Fermé
scouiky Messages postés 16 Date d'inscription mardi 24 juin 2014 Statut Membre Dernière intervention 4 septembre 2015 - 24 juin 2014 à 15:20
scouiky Messages postés 16 Date d'inscription mardi 24 juin 2014 Statut Membre Dernière intervention 4 septembre 2015 - 1 juil. 2014 à 15:50
Bonjour,

Voilà plusieurs heures que je suis bloqué. Je suis en première année de BTS informatique, autant dire que je suis pas un as :P.

Donc voilà, j'ai un tableau de données, qui représente des boites.
$tab = array(
     array('numBoite' => ...,
              'longueur' => ...,
              'largeur' => ...
              )
       );


Je le remplis avec mes boites issues de ma bdd.


je voudrais ensuite pouvoir trier $tab selon longueur et largeur DESC, comme on aurait fait en SQL
SELECT * FROM tab ORDER BY longueur DESC AND largeur DESC


Seulement voilà, je suis bloqué. Mais bloqué bloqué :P

Je vous en prie, sortez-moi de là =D
A voir également:

3 réponses

alexdu17200 Messages postés 1282 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 7 mars 2016 834
Modifié par alexdu17200 le 24/06/2014 à 15:25
Salut, pour classer un tableau à plusieurs dimensions dans l'ordre DESC, il s'agit de la commande array_multisort($var_tab, SORT_DESC), l'ordre se fera en fonction de la valeur de la première colonne affichée.

Mais puisque tu dis Je le remplis avec mes boites issues de ma bdd. , pourquoi justement, tu ne fais pas ta requête
SELECT * FROM tab ORDER BY longueur DESC AND largeur DESC
?
0
scouiky Messages postés 16 Date d'inscription mardi 24 juin 2014 Statut Membre Dernière intervention 4 septembre 2015
24 juin 2014 à 15:36
Euh ouais... ouais ouais. Mais ouais t'as carrément raison, c'est tout bête, et je sais pas pourquoi je cherche à faire comme ça depuis ce matin.

Bah merci de m'ouvrir les yeux. Purée, je vais me faire un café.

Merci hein, merci mille fois ^^ je vais suppr ce topic maintenant :)
0
alexdu17200 Messages postés 1282 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 7 mars 2016 834
24 juin 2014 à 15:40
De rien, on est là pour çà, moi aussi je suis passé par là, y'a 2-3 ans, alors n'hésite pas, si on peut t'aider, A+
0
scouiky Messages postés 16 Date d'inscription mardi 24 juin 2014 Statut Membre Dernière intervention 4 septembre 2015
24 juin 2014 à 15:42
ouais ^^ merci a+
0
scouiky Messages postés 16 Date d'inscription mardi 24 juin 2014 Statut Membre Dernière intervention 4 septembre 2015
1 juil. 2014 à 15:50
Pour ceux qui passent par là, j'ai trouvé un truc bien sympas qui vient de https://www.php.net/ksort ça ma bien aidé pour trier un tableau selon une colonne.

Même si ça ne répond pas vraiment au topic (ça trie sur 1 colonne), je pense qu'il y a moyen de bidouiller le truc. A voir donc, je ne m'y suis pas penché.

A nice way to do sorting of a key on a multi-dimensional array without having to know what keys you have in the array first:

<?php
$people = array(
array("name"=>"Bob","age"=>8,"colour"=>"red"),
array("name"=>"Greg","age"=>12,"colour"=>"blue"),
array("name"=>"Andy","age"=>5,"colour"=>"purple"));

var_dump($people);

$sortArray = array();

foreach($people as $person){
    foreach($person as $key=>$value){
        if(!isset($sortArray[$key])){
            $sortArray[$key] = array();
        }
        $sortArray[$key][] = $value;
    }
}

$orderby = "name"; //change this to whatever key you want from the array

array_multisort($sortArray[$orderby],SORT_DESC,$people);

var_dump($people);
?>

Output from first var_dump:

[0]=>
  array(3) {
    ["name"]=>
    string(3) "Bob"
    ["age"]=>
    int(8)
    ["colour"]=>
    string(3) "red"
  }
  [1]=>
  array(3) {
    ["name"]=>

    string(4) "Greg"
    ["age"]=>
    int(12)
    ["colour"]=>
    string(4) "blue"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(4) "Andy"
    ["age"]=>
    int(5)
    ["colour"]=>

    string(6) "purple"
  }
}

Output from 2nd var_dump:

array(3) {
  [0]=>
  array(3) {
    ["name"]=>
    string(4) "Greg"
    ["age"]=>
    int(12)
    ["colour"]=>
    string(4) "blue"
  }
  [1]=>
  array(3) {
    ["name"]=>

    string(3) "Bob"
    ["age"]=>
    int(8)
    ["colour"]=>
    string(3) "red"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(4) "Andy"
    ["age"]=>
    int(5)
    ["colour"]=>

    string(6) "purple"
  }

There's no checking on whether your array keys exist, or the array data you are searching on is actually there, but easy enough to add.
0