【问题标题】:php multi dimensional array sort issuephp多维数组排序问题
【发布时间】:2012-07-17 14:58:28
【问题描述】:

我有一个复杂的多维数组。结构是这样的

Array
(
    [0] => Array
        (
            [countries] => Array
                (
                    [0] => Array
                        (
                            [country_code] => US                            
                            [growth] => 3.57
                        )

                    [1] => Array
                        (
                            [country_code] => CA                            
                            [growth] => 4.77
                        )

                    [2] => Array
                        (
                            [country_code] => TT                            
                            [growth] => 0
                        )
                )
            [group_name] => North America
        )

    [1] => Array
        (
            [countries] => Array
                (
                    [0] => Array
                        (
                            [country_code] => BR                           
                            [growth] => 2.19
                        )

                    [1] => Array
                        (
                            [country_code] => PE                           
                            [growth] => 1.78
                        )

                    [2] => Array
                        (
                            [country_code] => UY                           
                            [growth] => 8.83
                        )

                    [3] => Array
                        (
                            [country_code] => MX                           
                            [growth] => 3.83
                        )
                )
            [group_name] => South America
        )
)

我想对它们进行排序(可能使用array_multisort),以便它们根据growth(最高优先)进行排序

这样排序后的数组就会是

Array
(
    [0] => Array
        (
            [countries] => Array
                (
                    [0] => Array
                        (
                            [country_code] => CA                            
                            [growth] => 4.77
                        )
                    [1] => Array
                        (
                            [country_code] => US                            
                            [growth] => 3.57
                        )                 
                    [2] => Array
                        (
                            [country_code] => TT                            
                            [growth] => 0
                        )
                )
            [group_name] => North America
        )

    [1] => Array
        (
            [countries] => Array
                (
                   [0] => Array
                        (
                            [country_code] => UY                           
                            [growth] => 8.83
                        )

                   [1] => Array
                        (
                            [country_code] => MX                           
                            [growth] => 3.83
                        )
                    [2] => Array
                        (
                            [country_code] => BR                           
                            [growth] => 2.19
                        )

                    [3] => Array
                        (
                            [country_code] => PE                           
                            [growth] => 1.78
                        )
                )
            [group_name] => South America
        )
)

我是 PHP 新手,所以我不知道如何对这个复杂的数组进行排序。我知道如何对简单的多维数组进行排序,如http://in2.php.net/manual/en/function.array-multisort.php中所示

【问题讨论】:

  • 我想对一个复杂的数组进行排序,但我不知道该怎么做。我已经阅读了手册,但找不到这样一个复杂数组的好例子。

标签: php sorting multidimensional-array


【解决方案1】:

最坏的情况是,您创建自己的排序函数并使用usort
它实际上是为这类事情而设计的。

在您的情况下,您将通过 $arr[$i]['countries'] 并根据 $arr['growth'] 进行比较函数排序。

【讨论】:

    【解决方案2】:

    我多年来一直使用以下排序功能:

    /**
     * sorting array of associative arrays - multiple row sorting using a closure
     * see also: the-art-of-web.com/php/sortarray/
     * @param array $data input-array
     * @param string|array $fields array-keys
     * @license Public Domain
     * @return array
     */
    function sortArray( $data, $field )
    {
        $field = (array) $field;
        uasort( $data, function($a, $b) use($field) {
            $retval = 0;
            foreach( $field as $fieldname )
            {
                if( $retval == 0 ) $retval = strnatcmp( $a[$fieldname], $b[$fieldname] );
            }
            return $retval;
        } );
        return $data;
    }
    
    
    // example call, sort by 'growth' first and by 'country_code' afterwards
    // this would be equal to a MySQL 'ORDER BY `growth` ASC, `country_code` ASC'
    foreach( $countryArray as &$item )
    {
        $item['countries'] = sortArray( $item['countries'], array( 'growth', 'country_code' ) );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多