2012-09-14 2 views
6

J'ai un tableau de noms de mois actuellement ordonnés comme ("Avril", "Août", "Février") etc Je voudrais commander cette liste de sorte qu'il est dans un l'ordre normal du mois tel que ("Janvier", "Février", "Mars")PHP réorganiser le tableau des noms de mois

Ce tableau est rempli à partir d'une requête SHOW TABLES sql et malheureusement les SHOW TABLES n'ont pas de paramètre ORDER BY donc je pense que mon meilleur Parier est de les ajouter à un tableau et de réorganiser le tableau pour obtenir ce que je cherche.

+0

Voulez-vous dire que vous avez des tables pour chaque mois? Si oui, pourquoi??? – PeeHaa

+0

Avoir une table pour chaque mois semble être un sérieux problème de conception de base de données. –

Répondre

14

Convertissez les mois en valeur numérique. Ensuite commander votre tableau en utilisant numériquement sort()

Vous pouvez utiliser cette question: convert month from name to number

@ réponse de Matthew semble bien fonctionner:

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

solution de travail

$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

Cela a fonctionné PARFAITEMENT! Merci! – Ron

0

Il est impossible de trier le tableau en tant que tableau autonome, car le système n'a aucun moyen de du fait qui vient en premier Janvier, suivi Février, etc. Vous pouvez définir un hachage d'abord, comme

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

Ensuite, vous pouvez trier votre tableau de cette manière

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

sorties

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

Ceci est une version légèrement optimisée (sans date 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

Vous pouvez suivre ci-dessous étape

  1. Obtenir la sortie SHOW TABLES, qui sera liste non-commandes mois ("Avril", "Août", "Février")
  2. passe pour passer ce cas comme ci-dessous
    $ output_show_tables = ("Avril", "Août", "Février") $ order_month_list = array(); foreach ($ output_show_tables comme mois $) {

commutateur (mois $) case 'janvier': order_month_list $ [1] = janvier; Pause; $ order_month_list [2] = février; Pause; .. ... $ order_month_list [12] = décembre; Pause;

}

  1. maintenant vous obtenez la liste des commandes mois