2011-11-01 5 views
7

je casse ma tête à essayer de comprendre comment faire de ce droit, j'ai ce tableau multidimensionnel:multiples dimensions de tri par tableau chaîne

Array 
(
    [0] => Array 
     (
      [time] => November 1st 10:10 
      [query] => movies 
      [set] => 1 
      [matches] => No matching results 
      [results] => 5 
     ) 

    [1] => Array 
     (
      [time] => November 1st 10:10 
      [query] => cinemas 
      [set] => 1 
      [matches] => No matching results 
      [results] => 2 
     ) 

) 

Dans la vraie vie, il pourrait y avoir beaucoup plus sous tableaux, mais disons que je veux trier par "requête" par ordre alphabétique, comment puis-je y parvenir?

j'ai vu que des solutions pour le type entier ou index de clé, le résultat final, dans ce cas, serait:

Array 
    (
     [0] => Array 
      (
       [time] => November 1st 10:10 
       [query] => cinemas 
       [set] => 1 
       [matches] => No matching results 
       [results] => 2 
      ) 
     [1] => Array 
      (
       [time] => November 1st 10:10 
       [query] => movies 
       [set] => 1 
       [matches] => No matching results 
       [results] => 5 
      ) 

    ) 

Très apprécié, merci.

Répondre

15
function querySort ($x, $y) { 
    return strcasecmp($x['query'], $y['query']); 
} 

usort($myArray, 'querySort'); 
+0

Ne fonctionne pas pour moi! –

+0

Travailler comme un charme pour moi. –

1

J'utilise souvent cette fonction pour trier des tableaux multidimensionnels:

function sortmulti ($array, $index, $order, $natsort=FALSE, $case_sensitive=FALSE) { 
     if(is_array($array) && count($array)>0) { 
      foreach(array_keys($array) as $key) { 
       $temp[$key]=$array[$key][$index]; 
      } 
      if(!$natsort) { 
       if ($order=='asc') { 
        asort($temp); 
       } else {  
        arsort($temp); 
       } 
      } 
      else 
      { 
       if ($case_sensitive===true) { 
        natsort($temp); 
       } else { 
        natcasesort($temp); 
       } 
       if($order!='asc') { 
       $temp=array_reverse($temp,TRUE); 
       } 
      } 
      foreach(array_keys($temp) as $key) { 
       if (is_numeric($key)) { 
        $sorted[]=$array[$key]; 
       } else {  
        $sorted[$key]=$array[$key]; 
       } 
      } 
      return $sorted; 
     } 
    return $sorted; 
} 

Works charme :)

1

d'accord avec réponse @Hammerite, Mais voici un chemin le plus court de le faire sorte de tri. Vous pouvez obtenir le même résultat à partir de PHP 5.3, en utilisant une fonction anonyme :

usort($myArray, function($x, $y) { 
     return strcasecmp($x['query'] , $y['query']); 
}); 

17,1. - seulement la correction de la syntaxe

Questions connexes