簡體   English   中英

在PHP或MySQL中按日期(月年)排序

[英]Sort by Date (Month Year) in PHP or MySQL

我已經檢查過SOF的所有內容,但無法找到解決方案。 我有日期是monthyear這樣從MySQL的到來。 我的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
        )

)

但我希望它按DEC順序按MonthYear排序...排序后上述數組中的順序不正確。

下面的排序順序是按月和年的Desc順序。

.. 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 ,但是bundle_price應該在數組中排序。

您需要執行一些步驟來實現此目的。

設置每個月的strtotime變量,然后進行排序。

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

tempArray您將只有每個月的strtotime結果的鍵。 現在,您需要做些抱歉。

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

現在您可以使用print_r($myResult) ,結果將符合您的期望。

更改數據格式是否為時已晚?

YYYY MM將大大簡化您的任務。

然后,您可以按ORDER BY DATE (DESC)

實際上,將其設置為INT而不是字符串將更有效,並且仍易於在PHP中格式化以進行顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM