2011-06-22 4 views
0

j'ai ce tableauTri multi-gamme par la valeur intérieure

[Computers] => Array 
(
    [0] => Array 
     (
      [product_id] => 78 
      [category_name] => Computers 
      [sort_order] => 1 
     ) 

    [1] => Array 
     (
      [product_id] => 70 
      [category_name] => Computers 
      [sort_order] => 1 
     ) 

) 


[Scanners] => Array 
(
    [0] => Array 
     (
      [product_id] => 65 
      [category_name] => Scanners 
      [sort_order] => 6 
     ) 

) 

[Printers] => Array 
(
    [0] => Array 
     (
      [product_id] => 58 
      [category_name] => Printers 
      [sort_order] => 3 
     ) 

) 
[Screens] => Array 
(
    [0] => Array 
     (
      [product_id] => 62 
      [category_name] => Screens 
      [sort_order] => 2 
     ) 

) 

Je ne peux pas l'air de trouver un moyen de trier le tableau en fonction de la sort_order clé. J'ai essayé tous les exemples de here mais pas de chance. J'ai besoin des tableaux dans cet ordre

Computers 
Screens 
Printers 
Scanners 
+0

double possible de [PHP tableau multidimensionnel de tri par valeur] (http://stackoverflow.com/questions/2699086/php-sort-multidimensional-array-by-value – hakre

+0

Si vous regardez ma question je déclare clairement que j'ai essayé toutes ces solutions sans succès parce qu'il y a des tableaux internes dans ma question – Trace

+0

Donc votre problème actuel est comment adopter les réponses de l'autre question pour vos données? – hakre

Répondre

1

essayer cela

function aasort (&$array, $key) { 
    $sorter=array(); 
    $ret=array(); 
    reset($array); 

    foreach ($array as $ii => $va) { 
      foreach ($array[$ii] as $i => $val) { 
       $sorter[$ii]=$val[$key]; 
      } 
    } 
    asort($sorter); 
    foreach ($sorter as $element => $value) { 
     $ret[$element]=$array[$element]; 
    } 
    $array=$ret; 
} 

aasort($array,"sort_order"); 
+4

Attribution s'il vous plaît. – mario

+0

qu'est-ce que vous voulez dire l'attribution – Trace

+0

merci encore ... qui a bien fonctionné – Trace

1

Vous avez simplement le paramètre de tri au mauvais niveau. Vous voulez trier le plus haut niveau, n'est-ce pas? Donc, mettez le paramètre de tri là aussi. La structure de données suivante serait beaucoup plus logique:

[Computers] => Array 
(
    [sort_order] => 1, 
    [data] => array(
     [0] => Array 
      (
       [product_id] => 78, 
       [category_name] => Computers, 
       [sort_order] => 1, 
      ) 
    ) 
) 

Si vous imbriquez l'ordre de tri en profondeur dans la structure de données que vous avez fera des algorithmes de tri horribles.

0

Cela devrait être suffisant:

uasort($yourArray, 
     create_function('$a,$b','return $a[0]["sort_order"] > $b[0]["sort_order"];')); 
Questions connexes