简体   繁体   English

多维数组按字符串排序

[英]multi dimensional array sorting by string

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. 非常感谢,谢谢。

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

usort($myArray, 'querySort');

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 :) 很有魅力:)

agreed with @Hammerite answer, But here is a shortest way of doing this kind of sorting. 同意@Hammerite的回答,但这是进行这种排序的最短方法。 You can achieve the same result starting from PHP 5.3, by using an anonymous function : 您可以使用匿名函数从PHP 5.3开始获得相同的结果:

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

17.1. 17.1。 - only syntax fix -仅语法修复

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM