2009-05-25 10 views
2

J'ai un tableau multidimensionnel, qui consiste essentiellement en un sous-tableau pour chaque année. Ainsi, par exemple, si j'avais une valeur de trois années de données, il pourrait ressembler à ceci:Tri d'un tableau multidimensionnel en utilisant array_multisort, où vous ne connaissez pas les dimensions du tableau

$data[0] = Array(0,1,2,3,4,5,6,7); 
$data[1] = Array(6,5,4,3,6,7,8,9); 
$data[2] = Array(1,4,2,5,7,3,1,4); 

Maintenant, je veux être en mesure de trier ces tableaux sur la base de l'une des années. Par exemple, je pourrais vouloir trier en fonction de la deuxième année, auquel cas ils seraient tous triés en fonction de la réorganisation de $ data [1].

Je peux le faire facilement avec array_multisort:

array_multisort($data[1],SORT_ASC,$data[0],$data[2]); 

C'est bien, mais je ne sais pas combien d'années de données, il y aura. Je veux un moyen de spécifier juste le bon nombre d'arguments, mais je ne sais pas comment faire cela en php, sauf si je dois juste avoir une déclaration if pour chaque nombre d'années, ce qui semble incroyablement douloureux:

if ($num_years == 1) 
{ 
    array_multisort($data[$which_year],SORT_ASC); 
} 
else if ($num_years == 2) 
{ 
    array_multisort($data[$which_year],SORT_ASC,$data[0],$data[1]); // this does work, interestingly, in spite of the repetition... 
} 

Quelqu'un sait-il d'une meilleure façon?

Répondre

5

Vous pouvez toujours utiliser call_user_func_array, en spécifiant array_multisort comme premier paramètre et en créant un tableau de paramètres à transmettre à array_multisort. Quelque chose comme:

$params = array(); 
foreach($data as $year){ 
    $params[] = $year; 
} 
call_user_func_array('array_multisort', $params); 
+0

Ah! Cool. Cela ressemble exactement à ce dont j'ai besoin. Je vais l'essayer. – Ben

+0

Cela fonctionne! Une chose: vous devez ajouter les tableaux dans le tableau $ params par référence, sinon cela ne fonctionne pas. Donc: $ params [] = &$year; – Ben

Questions connexes