1

日付で配列をソートすることに関する多くの投稿を見つけることができることを私は知っています。私は成功せずに私のもの(「$ MyArray」)をソートしようとして何時間も苦労しています(そして私はPHPの初心者なので、答えが明らかな場合は許してください):

array(9) { 

    [0]=> array(1) {["13 March 2012"]=> string(32) "Commandes Anticorps et Kits 2012" }

    [1]=> array(1) {["4 May 2012"]=> string(23) "Prix de la Chancellerie" } 

    [2]=> array(1) { ["17 April 2012"]=> string(23) "MàJ antivirus Kapersky" }

    [3]=> array(1) { ["14 May 2012"]=> string(24) "Atelier Formation INSERM" }

    [4]=> array(1) { ["14 March 2012"]=> string(13) "Webzine AP-HP" }

    [5]=> array(1) { ["11 April 2011"]=> string(32) "Nouvelle Charte des Publications" }

    [6]=> array(1) { ["23 April 2012"]=> string(28) "BiblioINSERM: Nouveaux Codes" }

    [7]=> array(1) { ["7 March 2012"]=> string(39) "Springer : Protocols également en test" }

    [8]=> array(1) { ["4 October 2011"]=> string(48) "[info.biblioinserm] Archives des titres Springer" } 

    }

というわけで、日付順に並べたいと思います。

私が見つけたさまざまな解決策の中で、次のことを試しました。

function date_compare($a, $b)
{
    $t1 = strtotime($a['datetime']);
    $t2 = strtotime($b['datetime']);

return $t1 - $t2;
}

そして関数を呼び出しました:

usort($MyArray, 'date_compare');

しかし、うまくいきません... :-(

どんな助けでも大歓迎です!!

4

1 に答える 1

2

内部配列では、日付文字列は実際には配列キーです。strtotime()そのため、キー自体を呼び出す必要があります。これはarray_keys()、両方の比較配列からキーを抽出し、array_shift()それらの最初のものを取得するために使用します (ただし、1 つしかありません)。

function date_compare($a, $b)
{
    // Remove the first array key (though there should be only one)
    // from both the $a and $b values:
    $akeys = array_keys($a);
    $akey = array_shift($akeys);
    // Could also use
    // $akey = akeys[0];

    $bkeys = array_keys($b);
    $bkey = array_shift($bkeys);
    // Could also use
    // $bkey = bkeys[0];

    // And call strtotime() on the key date values
    $t1 = strtotime($akey);
    $t2 = strtotime($bkey);

    return $t1 - $t2;
}

usort($MyArray, 'date_compare');
于 2012-05-17T14:08:19.327 に答える