使用uksort在PHP中对Month-Year多维数组进行排序

使用uksort在PHP中对Month-Year多维数组进行排序

问题描述:

I want to sort the following array:

Array(
    [05/2017] => Array (
        [city] => 'ABC'
        [memebers] => '50'
    )
    [03/2017] => Array (
        [city] => 'ABC'
        [members] => '25'
    )
    [10/2016] => Array (
        [city] => 'ABC'
        [members] => '20'
    )
    [11/2017] => Array (
        [city] => 'ABC'
        [members] => '65'
    )
)

The expected result:

Array(
    [10/2016] => Array (
        [city] => 'ABC'
        [members] => '20'
    )
    [03/2017] => Array (
        [city] => 'ABC'
        [members] => '25'
    )
    [05/2017] => Array (
        [city] => 'ABC'
        [members] => '50'
    )
    [11/2017] => Array (
        [city] => 'ABC'
        [members] => '65'
    )
)

I'm using uksort to sort it, but I guess uksort does not work with multidimensional array:

uksort($data, function($a1, $a2) {
    $time1 = strtotime($a1);
    $time2 = strtotime($a2);

    return $time1 - $time2;
});

Please suggest how will it work with uksort or any other possibility?

我想对以下数组进行排序: p>

  Array(  
 [05/2017] =>数组(
 [city] =>'ABC'
 [memebers] => '50'
)
 [03/2017] =>数组(\  n [city] =>'ABC'
 [members] => '25'
)
 [10/2016] =>数组(
 [city] =>'ABC'
 [ 成员] => '20'
)
 [11/2017] =>数组(
 [city] =>'ABC'
 [成员] =>'65'
)
  )
  code>  pre> 
 
 

预期结果: p>

  Array(
 [10/2016] => Array(  
 [city] =>'ABC'
 [members] => '20'
)
 [03/2017] =>数组(
 [city] =>'ABC'
  [members] => '25'
)
 [05/2017] =>数组(
 [city] =>'ABC'
 [members] => '50'
)\  n [11/2017] =>数组(
 [city] =>'ABC'
 [members] =>'65'
)
)
  code>  pre> \  n 
 

我正在使用 uksort code>对其进行排序, 但我猜 uksort code>不适用于多维数组: p>

  uksort($ data,function($ a1,$ a2){
 $ time1  = strtotime($ a1); 
 $ time2 = strtotime($ a2); 
 
返回$ time1  -  $ time2; 
}); 
  code>  pre> 
 
 

请建议如何使用 uksort code>或任何其他可能性? p> div>

This should works :

$data = 
    array(
        '05/2017' => array (
            'city' => 'ABC',
            'memebers' => '50'
        ),
        '03/2017' => array (
            'city' => 'ABC',
            'members' => '25'
        ),
        '10/2016' => array (
            'city' => 'ABC',
            'members' => '20'
        ),
        '11/2017' => array (
            'city' => 'ABC',
            'members' => '65'
        ),
    );

uksort($data, function($a1, $a2) {
    return DateTime::createFromFormat('m/Y|', $a1) <=> DateTime::createFromFormat('m/Y|', $a2);
});

var_dump($data);

You need to use DateTime since your dates are not well formated, then just compare the timestamps. As pointed by Mark, use "m" for months, and you can use "<=>" operator (since PHP 7)