【问题标题】:multi dimensional array sorting by string多维数组按字符串排序
【发布时间】:2011-12-19 07:46:43
【问题描述】:

我正在努力弄清楚如何正确地做到这一点,我有这个多维数组:

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
            )

    )

非常感谢,谢谢。

【问题讨论】:

    标签: php multidimensional-array asort


    【解决方案1】:
    function querySort ($x, $y) {
        return strcasecmp($x['query'], $y['query']);
    }
    
    usort($myArray, 'querySort');
    

    【讨论】:

    • 对我来说是一种魅力。
    【解决方案2】:

    我经常用这个函数对多维数组进行排序:

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

    很有魅力:)

    【讨论】:

      【解决方案3】:

      同意@Hammerite 的回答, 但这是进行这种排序的最短方法。从 PHP 5.3 开始,您可以通过使用匿名函数获得相同的结果:

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

      17.1. - 仅语法修复

      【讨论】:

        猜你喜欢
        • 2012-03-28
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多