PHP 重新排序月份名称数组

10

我有一个月份名称的数组,目前按照("April", "August", "February")等顺序排序。我想重新排列这个列表,使它按照正常的月份顺序排序,例如("January", "February", "March")。

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


你是说你每个月都有表格吗?如果是这样的话:为什么??? - PeeHaa
每个月都有一个表格似乎是一个严重的数据库设计问题。 - Guillaume Poussel
5个回答

19

将月份转换为数字值。然后使用sort()按数字顺序对数组进行排序。

您可以使用此问题:将月份从名称转换为数字

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

3
这是一个稍微优化过的版本(没有日期解析)^^
$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;
}

2
$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)

0

无法将数组作为独立数组进行排序,因为系统不知道一月在前、二月在后等。您可以最初定义一个哈希表,例如

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

然后你可以用这种方式对数组进行排序
array_to_be_sorted = sorted(array_to_be_sorted, key = lambda(x): a[x])

0

您可以按照以下步骤操作:

  1. 获取 SHOW TABLES 的输出,这将是一个无序的月份列表("April", "August", "February")
  2. 将其传递给以下 switch case 语句
    $output_show_tables = ("April", "August", "February") $order_month_list = array(); foreach($output_show_tables as $month){

switch($month) case 'january': $order_month_list[1] = january; break; $order_month_list[2] = February; break; .. ... $order_month_list[12] = December; break;

}

现在您可以获得月份订单列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接