11

I'm breaking my head trying to figure out how to do this right, I have this multi dimensional array:

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
        )

)

In real life, there could be alot more sub-arrays, but et's say I want to sort it by "query" alphabetically, how can I achieve this?

I saw only solutions for integer type or key index, the end result, in this case, would be:

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
            )

    )

Much appreciated, thanks.

3 Answers 3

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

usort($myArray, 'querySort');
Sign up to request clarification or add additional context in comments.

1 Comment

Working as a charm for me.
3

I often use this function to sort multi dimensional arrays:

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 a charm :)

Comments

1

agreed with @Hammerite answer, But here is a shortest way of doing this kind of sorting. You can achieve the same result starting from PHP 5.3, by using an anonymous function:

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

17.1. - only syntax fix

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.