按PHP或MySQL中的日期(月份)排序

时间:2017-08-03 10:31:35

标签: php mysql sorting

我已经检查过SOF的所有地方,但无法找到它的解决方案。我有来自mysql的monthyear这样的日期。我的sql查询使用的日期格式如DATE_FORMAT( month, '%m %Y' )

[0] => Array
        (
            [month] => 12 2016
            [bundle_Price] => 6000
        )

[1] => Array
        (
            [month] => 07 2017
            [bundle_Price] => 1200
        )

这是我的排序功能..

$MyResult = Company::Sorting($Result,'month');


public static function vpbxSorting_2($a,$subkey) {
    foreach($a as $k=>$v) {
        $b[$k] = strtolower($v[$subkey]);
    }
    asort($b, 1);
    foreach($b as $key=>$val) {
        $c[] = $a[$key];
    }
    return $c;
}

它让我像这样排序不正确..

print_r($MyResult );

排序如下:

Array
(
    [0] => Array
        (
            [month] => 01 2017
            [bundle_Price] => 1200
        )

    [1] => Array
        (
            [month] => 02 2017
            [bundle_Price] => 7200
        )

    [2] => Array
        (
            [month] => 04 2017
            [bundle_Price] => 1200
        )

    [3] => Array
        (
            [month] => 04 2016
            [bundle_Price] => 7200
        )

    [4] => Array
        (
            [month] => 05 2017
            [bundle_Price] => 1200
        )

    [5] => Array
        (
            [month] => 05 2016
            [bundle_Price] => 13200
        )

    [6] => Array
        (
            [month] => 06 2017
            [bundle_Price] => 9600
        )

    [7] => Array
        (
            [month] => 06 2016
            [bundle_Price] => 6000
        )

    [8] => Array
        (
            [month] => 07 2017
            [bundle_Price] => 14400
        )

    [9] => Array
        (
            [month] => 07 2016
            [bundle_Price] => 6000
        )

    [10] => Array
        (
            [month] => 08 2017
            [bundle_Price] => 1200
        )

    [11] => Array
        (
            [month] => 08 2016
            [bundle_Price] => 6000
        )

    [12] => Array
        (
            [month] => 09 2016
            [bundle_Price] => 17500
        )

    [13] => Array
        (
            [month] => 10 2016
            [bundle_Price] => 1200
        )

    [14] => Array
        (
            [month] => 12 2016
            [bundle_Price] => 6000
        )

)

但是我希望它在DESC顺序中按照MonthYear排序...排序后上面数组中的顺序不正确..

以下排序顺序是按月和年的描述顺序。

.. so on....
[month] => 03 2017
[month] => 02 2017
[month] => 01 2017
[month] => 12 2016
[month] => 11 2016
[month] => 10 2016
[month] => 09 2016
... so on...

我想按数组[month]字段排序,而不是[bundle_price],但是bundle_price应该在数组中。

2 个答案:

答案 0 :(得分:1)

您需要执行几个步骤才能实现此目的。

每个月变量strtotime,然后进行排序。

$tempArray = [];
for($x = 0; $x < count($myResult); $x++){
    $tempArray[strtotime($myResult['month])] = $myResult[$x];
}

tempArray中,您将获得每月只有strtotime结果的密钥。现在你需要做sory。

$keys = sort(array_keys($tempArray));

现在您可以print_r($myResult),结果将符合您的预期。

答案 1 :(得分:1)

更改数据格式是否为时已晚?

YYYY MM 非常 简化您的任务。

然后你可以ORDER BY DATE (DESC)

事实上,将其设为INT而不是字符串会更有效率。仍然很容易在PHP格式化显示。