2012-09-14 17 views
6

Ho una serie di nomi di mese attualmente ordinati come ("Aprile", "Agosto", "Febbraio") ecc. Vorrei riordinare questo elenco in modo che sia in ordine normale del mese come ("Gennaio", "Febbraio", "Marzo")Riordino PHP dei nomi dei mesi

Questo array viene popolato da una query sql SHOW TABLES e sfortunatamente i TABELLA SHOW non hanno un parametro ORDER BY quindi penso che il mio meglio la scommessa è di aggiungerli a un array e riordinare l'array per ottenere quello che sto cercando.

+0

Sta dicendo di avere le tabelle per ogni mese? Se è così: perché ??? – PeeHaa

+0

Avere una tabella per ogni mese sembra essere un problema serio di progettazione di DB. –

risposta

14

Converti i mesi in un valore numerico. Poi ordinare la matrice numericamente utilizzando sort()

È possibile utilizzare questa domanda: convert month from name to number

@ risposta di Matteo sembra funzionare bene:

$date = date_parse('July');; 
echo $date["month"]; 

Soluzione di lavoro

$months = array("April", "August", "February"); 

usort($months, "compare_months"); 
var_dump($months); 

function compare_months($a, $b) { 
    $monthA = date_parse($a); 
    $monthB = date_parse($b); 

    return $monthA["month"] - $monthB["month"]; 
} 
+0

Questo ha funzionato perfettamente! Grazie! – Ron

0

E ' non è possibile ordinare l'array come array autonomo, poiché il sistema non ha modo di kn a causa quel gennaio viene prima, seguito da febbraio ecc Si può definire un hash inizialmente, come

a = {'January':0,'February':1,...'December':11} 

Poi è possibile ordinare l'array in questo modo

array_to_be_sorted = sorted(array_to_be_sorted, key = lambda(x): a[x]) 
1
$input = array('May', 'December', 'March', 'July'); 
$output = array(); 

foreach($input as $month) { 
    $m = date_parse($month); 
    $output[$m['month']] = $month; 
} 
ksort($output); 

var_dump($output); 

uscite

array 
    3 => string 'March' (length=5) 
    5 => string 'May' (length=3) 
    7 => string 'July' (length=4) 
    12 => string 'December' (length=8) 
1

Questa è una versione leggermente ottimizzata (senza data parsing) ^^

$foobar_months = array('april','februari', 'march', 'may', 'june', 'januari', 'august', 'october', 'july', 'november', 'december', 'september'); 
usort($foobar_months, "sortMonths"); 
var_dump($foobar_months); 

function sortMonths ($a, $b) { 
    $months = array('januari', 'februari', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'); 
    if (array_search($a, $months) == array_search($b, $months)) return 0; 
    return array_search($a, $months) > array_search($b, $months) ? 1 : -1; 
} 
0

È possibile seguire passo sotto

  1. ottenere l'output di SHOW TABLES, che sarà elenco delle Nazioni Unite-ordini di mesi ("Aprile", "Agosto", "Febbraio")
  2. passare questo per passare il caso come sotto
    $ output_show_tables = ("April", "August", "February") $ order_month_list = array(); foreach ($ output_show_tables come $ al mese) {

switch ($ al mese) caso 'gennaio': $ order_month_list [1] = Gennaio; rompere; $ order_month_list [2] = febbraio; rompere; .. ... $ order_month_list [12] = Dicembre; rompere;

}

  1. Ora si ottiene lista di ordine di mesi
Problemi correlati