2011-11-01 17 views
7

sto rompendo la testa cercando di capire come fare questo diritto, ho questo multi matrice bidimensionale:a più array bidimensionale di ordinamento da stringa

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 
     ) 

) 

Nella vita reale, ci potrebbe essere molto più sub- array, ma diciamo che voglio ordinarlo per "query" in ordine alfabetico, come posso ottenere questo?

vidi soluzioni solo per tipo intero o indice di chiave, il risultato finale, in questo caso, sarebbe:

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 
      ) 

    ) 

Molto apprezzato, grazie.

risposta

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

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

Non funziona per me! –

+0

Per me è un fascino. –

1

Io uso spesso questa funzione per ordinare a più matrici tridimensionali:

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; 
} 

Funziona un fascino :)

1

concordato con risposta @Hammerite, Ma qui è un modo più breve di fare questo tipo di smistamento. È possibile ottenere lo stesso risultato partendo da PHP 5.3, utilizzando una funzione anonima :

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

17,1. - solo la correzione della sintassi

Problemi correlati