2011-11-01 18 views
7

estoy rompiendo la cabeza tratando de encontrar la manera de hacer esto bien, no tengo esta matriz multidimensional:matriz multidimensional clasificación por cadena

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 
     ) 

) 

En la vida real, que podría ser mucho más sub- arrays, pero et's dicen que quiero ordenarlo por "consulta" alfabéticamente, ¿cómo puedo lograr esto?

sólo vi soluciones para el tipo de número entero o índice de clave, el resultado final, en este caso, sería:

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 
      ) 

    ) 

muy apreciada, gracias.

Respuesta

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

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

¡No funciona para mí! –

+0

Trabajando como un encanto para mí. –

1

que a menudo utilizan esta función para ordenar matrices multidimensionales:

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

trabaja un encanto :)

1

acuerdo con la respuesta @Hammerite, Pero aquí es un camino más corto para hacer esto tipo de clasificación. Se puede conseguir el mismo resultado a partir de PHP 5.3, mediante el uso de una función anónima :

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

17,1. - solo corrección de sintaxis

Cuestiones relacionadas