2012-05-17 2 views
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'); 

, но это не работает ... :-(

Любая помощь будет оценена !!

+0

Что не работает, оно возвращает какие-либо ошибки или просто не сортирует? –

+0

Можете ли вы изменить структуру исходного массива $ array (9)? – Sebas

+0

Он просто не сортирует по датам. – user1401141

ответ

2

в ваших внутренних массивов, строки даты являются Actua lly клавиши массива. Поэтому вам нужно позвонить strtotime() на самих ключах. Это использует array_keys() для извлечения ключей из обоих массивов сравнения и array_shift() для извлечения первого из них (хотя есть только один).

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'); 
+1

Майкл, ты спас мой день! Я потратил так много времени, и вы решили его за 3 минуты! Это невероятно. БОЛЬШОЕ БОЛЬШОЕ СПАСИБО!!!! – user1401141