使用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)