2017-08-03 8 views
1

私はSOFのどこでもチェックしましたが、解決策を見つけることができませんでした。私はmonthyearの日付を持っています。これはmysqlから来ています。クエリはここでは、このDATE_FORMAT(month, '%m %Y')PHPまたはMySQLで日付順(月の年)

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

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

のような日付形式を使用している私のSQLは私のソート機能..です

$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の順序で...上記の配列の順序はソート後に正しくありません。

以下のソート順は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... 

I]はない[bundle_priceにより、配列内の[month]フィールドで注文したい、しかし、配列であっbundle_priceする必要があります。

+0

わかりません。出力は意図した結果ですか?また、最初に月ごと、年ごとに注文したいが、bundle_priceは無関係ですか? – samayo

+0

'[bundle_price']ではなく配列の' [month] 'フィールドで注文したいですが、bundle_priceが配列内にあるはずです。 –

+0

今年はどうですか?それは月と年でなければなりません。そうでなければ、このようなものがあります。 '03 2017、04 2016、05 2017 ...' – samayo

答えて

1

データフォーマットを変更するのは時期尚早ですか?

YYYY MM 大幅にあなたの仕事を簡略化します。

は、次に、あなただけのORDER BY DATE (DESC)

実際には、文字列を表示するためにPHPでフォーマットすることがさらに効率的&簡単だろうではなく、INTそれを作ることができます。

+1

私は日付形式を 'DATE_FORMAT(月、 '%Y%m')' 'DATE_FORMAT(月、 '%m%Y')'と働いていました。どうもありがとう –

1

これを達成するには、いくつかの手順を実行する必要があります。

各月のstrtotimeを可変にして並べ替えます。 tempArray

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

あなたは毎月の唯一のstrtotime結果のキーを持つことになります。今、あなたはsoryをする必要があります。

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

今度はprint_r($myResult)となります。結果は期待どおりになります。

関連する問題