сортировка многомерного массива по строке - PullRequest
7 голосов
/ 01 ноября 2011

Я ломаю голову, пытаясь понять, как это сделать правильно, у меня есть этот многомерный массив:

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
        )

)

В реальной жизни может быть много подмассивов, но, скажем, я хочу отсортировать их по «запросу» в алфавитном порядке, как мне этого добиться?

Я видел только решения для целочисленного типа или индекса ключа, конечный результат, в данном случае, будет:

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
            )

    )

Очень признателен, спасибо.

Ответы [ 3 ]

16 голосов
/ 01 ноября 2011
function querySort ($x, $y) {
    return strcasecmp($x['query'], $y['query']);
}

usort($myArray, 'querySort');
2 голосов
/ 01 ноября 2011

Я часто использую эту функцию для сортировки многомерных массивов:

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

Работает брелок:)

1 голос
/ 10 января 2016

согласился с ответом @Hammerite, Но вот кратчайший способ сделать такую ​​сортировку. Вы можете достичь того же результата, начиная с PHP 5.3, используя анонимную функцию :

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

17,1. - только синтаксическое исправление

...