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

杰达万

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

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'
    )
)

预期结果:

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'
    )
)

我正在uksort对它进行排序,但我想uksort不适用于多维数组:

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

    return $time1 - $time2;
});

请建议它将如何工作uksort或任何其他可能性?

文森特·德科

这应该有效:

$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);

您需要使用 DateTime,因为您的日期格式不正确,然后只需比较时间戳即可。正如 Mark 所指出的,使用 "m" 几个月,您可以使用 "<=>" 运算符(自 PHP 7 起)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章