Trier un tableau multidimensionnel selon 2 colonnes

Résolu
scouiky Messages postés 20 Statut Membre -  
scouiky Messages postés 20 Statut Membre -
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

3 réponses

  1. alexdu17200 Messages postés 1579 Statut Membre 841
     
    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
  2. scouiky Messages postés 20 Statut Membre
     
    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
    1. alexdu17200 Messages postés 1579 Statut Membre 841
       
      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
    2. scouiky Messages postés 20 Statut Membre
       
      ouais ^^ merci a+
      0
  3. scouiky Messages postés 20 Statut Membre
     
    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