2013-03-21 23 views
7

ho il seguente formato matrice nel mio codice php:PHP Ordina Array per valore di data

foreach ($events as $info) { 
    $events_array[] = array(
     'title' => $info->Name, 
     'date' => $info->Date 
    ); 
} 
function cb($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
} 
usort($events_array, 'cb'); 

Edit: I valori di data sono nel formato: YYYY-MM-DD

In realtà, quando ho fare print_r, ottengo

[title] => SimpleXMLElement Object () [date] => SimpleXMLElement Object () 
+0

si prega di non utilizzare il 'pippo: .. endfoo;' sintassi nel file di codice contactual. che la sintassi è stata sempre pensata per il template e la maggior parte degli sviluppatori non si aspetteranno né apprezzeranno il fatto che vengano utilizzati altrove. – ThiefMaster

+1

sei sicuro che all'inizio c'era qualcosa nell'array? fai print_r() PRIMA che chiami usort. –

+0

l'array di eventi ha valori prima dell'ordinamento? – Lighthart

risposta

12

è necessario creare una propria funzione a più colonna di ordinamento (perché la matrice è 2-dimensionale):

array_sort_by_column($events_array, 'date'); 

var_dump($events_array); 

La funzione di ordinamento:

function array_sort_by_column(&$array, $column, $direction = SORT_ASC) { 
    $reference_array = array(); 

    foreach($array as $key => $row) { 
     $reference_array[$key] = $row[$column]; 
    } 

    array_multisort($reference_array, $direction, $array); 
} 
+2

http://www.php.net/manual/en/function.usort.php <- esempio # 2 usa un array bidimensionale quindi la nostra affermazione che deve fare un diverso bevause della 2 dimensionalità è errata ... – ITroubs

+0

ITroubs ha ragione, ecco come farlo con usort: http://stackoverflow.com/questions/2910611/php-sort-a-multidimensionale-array per elemento contenente data –