2012-11-20 3 views
5

Ho un array di timestamp che assomigliano a questo:Ordina array con data e ora?

2012-11-19 19:45 

ho bisogno di ordinarli per data. Potrei fare un bubble sort o qualcosa del genere se potessi ottenere il timestamp unix di un appuntamento, ma non so quale funzione mi dia questo. Ho guardato a tempo pieno ma non mi ha permesso di passare un formato di data. Inoltre non sono sicuro che una sorta di bolla sia il modo migliore per andare.

Qualche suggerimento?

Array esempio:

Inoltre, mi dispiace, avrei dovuto menzionato è stato nel 'show_date'.

Array 
(
    [15] => Array 
     (
      [show_date] => 2012-11-19 10:40 
     ) 

    [16] => Array 
     (
      [show_date] => 2012-11-20 10:40 
     ) 

    [17] => Array 
     (
      [show_date] => 2012-11-21 10:40 
     ) 

    [18] => Array 
     (
      [show_date] => 2012-11-22 10:40 
     ) 

) 
+0

Non è necessario scrivere un ordinamento di bolle (che è uno degli algoritmi di ordinamento meno efficienti). Basta usare una delle funzioni di ordinamento integrate di PHP. –

risposta

3

Non c'è bisogno di complicare questo. Basta usare il built-in funzione di sort:

sort($timestamp_array); 

Non è necessario convertire in timestamp UNIX perché le stringhe sono nel formato "ISO data ordinabili" standard. Ciò significa che se si ordinano le stringhe, le date saranno nell'ordine corretto.

Ecco una sessione php -a che mostra come funziona:

php > $ts = array('1986-01-31 12:11', '2012-01-01 13:12', '1980-10-10 12:00'); 
php > sort($ts); 
php > echo var_export($ts); 
array (
    0 => '1980-10-10 12:00', 
    1 => '1986-01-31 12:11', 
    2 => '2012-01-01 13:12', 
) 
+0

asort() e sort() restituiscono true per qualche motivo. Qualche idea? Vedere OP per esempio di output di array. – qwerty

+0

'sort()' non restituisce un array ordinato, restituisce se l'ordinamento ha avuto successo. Vedi: http://php.net/manual/en/function.sort.php.Ordina invece l'array * in posizione *, quindi l'array originale conterrà i valori nell'ordine corretto. –

+0

Sì, mio ​​male. Inoltre non ha funzionato perché ogni data è collocata entro [show_date] nella matrice. Ho funzionato, grazie! :) – qwerty

0

Non è necessario il formato della data per passare quella determinata data. Quando si passa strtotime('2012-11-19 19:45');, verrà restituito il timestamp UNIX.

EDIT:

$arr = array(); 
foreach ($dates as $k => $v) { 
    $arr[$k] = strtotime($v['date']);//or $k if your date is the index 
} 

array_multisort($arr, SORT_ASC, $dates); 
+0

Quindi il bubble sorting è il modo migliore e più semplice? – qwerty

+0

@qwerty No, bubble sort è uno degli algoritmi più lenti. Per un confronto, guarda qui [Algoritmo di ordinamento] (http://en.wikipedia.org/wiki/Sorting_algorithm) –

+0

Puoi sfruttare le funzioni integrate per l'ordinamento. Vedere la soluzione nella modifica di questo post – banzsh

1

Si può solo ordinare con PHP tipo standard. Vedere Sorting Arrays

asort($timestamps); 

Per esempio, è possibile definire una funzione di confronto

function cmp_show_date($a, $b) 
{ 
    if ($a['show_date'] == $b['show_date']) { 
     return 0; 
    } 

    return ($a['show_date'] < $b['show_date']) ? -1 : 1; 
} 

e l'uso che in

usort($timestamps, 'cmp_show_date'); 
+0

asort() e sort() restituiscono true per qualche motivo. Qualche idea? Vedere OP per esempio di output di array. – qwerty

+0

Guarda [asort] (http://www.php.net/manual/en/function.asort.php) e [sort] (http://www.php.net/manual/en/function.sort. php). "Restituisce TRUE in caso di successo o FALSE in caso di fallimento." Quindi, nessuna sorpresa qui. –

+0

@qwerty Guarda la mia risposta modificata. –

0

Si potrebbe utilizzare una combinazione di usort() e strtotime, ma preferirei usare la classe DateTime e il suo metodo getTimestamp perché può gestire fusi orari e diversi formati.