2012-09-14 14 views
6

Tengo un conjunto de nombres de mes ordenados actualmente como ("Abril", "Agosto", "Febrero") etc. Me gustaría pedir esta lista para que esté en un orden normal meses como ("enero", "febrero", "Marcha")PHP reordenar una matriz de nombres de mes

Esta matriz se está poblada de una consulta SQL Mostrar Tablas y, lamentablemente, las VER TABLAS no tiene un parámetro ORDER BY así que creo que mi mejor la apuesta es agregarlos a una matriz y reordenar la matriz para obtener lo que estoy buscando.

+0

¿Estás diciendo que tiene tablas para cada mes? Si es así, ¿por qué? – PeeHaa

+0

Tener una tabla para cada mes parece ser un problema serio de diseño de BD. –

Respuesta

14

Convierta los meses a un valor numérico. A continuación, ordenar la matriz numéricamente usando sort()

Puede utilizar esta pregunta: convert month from name to number

@ respuesta de Mateo parece funcionar bien:

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

Solución de trabajo

$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

¡Esto funcionó PERFECTAMENTE! ¡Gracias! – Ron

0

Es no es posible ordenar la matriz como una matriz independiente, ya que el sistema no tiene forma de kn debido que llega enero primero, seguido de Febrero, etc. Se puede definir un hash inicialmente, como

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

A continuación, se puede ordenar la matriz de esta manera

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); 

salidas

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

Esta es una versión ligeramente optimizada (sin fecha análisis sintáctico) ^^

$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

Usted puede seguir los siguientes pasos

  1. obtener la salida de SHOW TABLES, que estará lista de la ONU-órdenes de meses ("Abril", "Agosto", "Febrero")
  2. páselo a la caja del interruptor como se indica a continuación
    $ output_show_tables = ("Abril", "Agosto", "Febrero") $ order_month_list = array(); foreach ($ output_show_tables como $ mes) {
  3. interruptor

($ mes) caso 'enero': $ order_month_list [1] = Enero; descanso; $ order_month_list [2] = febrero; descanso; .. ... $ order_month_list [12] = diciembre; descanso;

}

  1. ya que usted consigue el orden de visualización de meses
Cuestiones relacionadas