2011-10-17 2 views
0

Possible en double:
Sort multidimensional array by multiple keysusort: comment je peux trier par plusieurs types de données?

Je veux savoir comment je peux usort un tableau de tableaux par différents types de données. Par exemple, j'ai ces données:

priority | title 
2   B 
3   C 
2   A 
1   A 
3   D 

J'ai besoin faire un « double tri » (comme SQL priority ASC, title ASC) pour l'obtenir:

priority | title 
1   A 
2   A  
2   B 
3   C 
3   D 

Sur vraiment, je dois le faire avec un trop grand nombre valeurs, mais je n'ai besoin que de la base. Mais pour profiter et ne pas risquer une logique différente, mon vrai problème est d'organiser comme: int priority ASC, string method ASC, string prefix ASC, int index ASC.

J'ai essayé quelque chose, mais je ne peux pas travailler. :(

+0

S'il vous plaît montrer comment cet exemple correspond à des données de votre structure de données (tableau de tableaux). Vraiment – GolezTrol

+0

, @FelixKling il est un doublon, et il résout mon problème aussi Merci. :) –

Répondre

2

Basé sur: PHP.net:multisort()

Comme vous l'avez indiqué dans votre question, ce n'est que les bases de la façon dont il peut être fait pour rendre plus dynamique toute la chose, vous auriez besoin d'un moyen de passer le. choix de tri dans une fonction qui les utilise dans le foreach pour contrôler les tableaux de tri sont utilisés ...

<?php 
//Build example data 
$data = array(); 
$data[] = array('priority'=>2,'title'=>'B'); 
$data[] = array('priority'=>3,'title'=>'C'); 
$data[] = array('priority'=>2,'title'=>'A'); 
$data[] = array('priority'=>1,'title'=>'A'); 
$data[] = array('priority'=>3,'title'=>'D'); 

foreach ($data as $key => $row) { 
    $priority[$key] = $row['priority']; 
    $title[$key] = $row['title']; 
} 

array_multisort($priority, SORT_ASC, $title, SORT_ASC, $data); 

print_r($data); 
?> 
+1

J'aime mieux que usort. – swt83