PHP重新排序月份名称数组

时间:2012-09-14 12:51:34

标签: php arrays

我有一系列月份名称目前订购如(“四月”,“八月”,“二月”)等。我想重新订购此列表,以便它处于正常的月份顺序,如(“一月“,”二月“,”三月“)

这个数组是从SHOW TABLES sql查询中填充的,不幸的是SHOW TABLES没有ORDER BY参数,所以我认为最好的办法是将它们添加到一个数组中并重新排序数组以获得我想要的内容

5 个答案:

答案 0 :(得分:16)

将月份转换为数值。然后使用sort()

以数字顺序排列数组

您可以使用此问题:convert month from name to number

@Matthew的答案似乎运作良好:

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

工作解决方案

$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"];
}

答案 1 :(得分: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);

<强>输出

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

答案 2 :(得分:1)

这是稍微优化的版本(没有日期解析)^^

$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;
}

答案 3 :(得分:0)

无法将阵列排序为独立阵列,因为系统无法知道1月位于第1位,接着是2月位等。您最初可以定义哈希,例如

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

然后你可以用这种方式对数组进行排序

array_to_be_sorted = sorted(array_to_be_sorted, key = lambda(x): a[x])

答案 4 :(得分:0)

您可以按照以下步骤进行操作

  1. 获取SHOW TABLES的输出,这将是几个月的未订单列表(“四月”,“八月”,“二月”)
  2. 将此传递给开关盒,如下所示 $ output_show_tables =(“四月”,“八月”,“二月”) $ order_month_list = array(); foreach($ output_show_tables为$ month){
  3. 开关($月) 案例'january': $ order_month_list [1] = 1月;打破; $ order_month_list [2] =二月;打破; .. ... $ order_month_list [12] = 12月;打破;

    }

    1. 现在您获得了几个月的订单列表