【问题标题】:PHP re-order array of month namesPHP重新排序月份名称数组
【发布时间】:2012-09-07 15:29:05
【问题描述】:

我有一组当前排序的月份名称,例如(“April”、“August”、“February”)等。我想重新排序此列表,使其符合正常的月份顺序,例如(“January ", "二月", "三月")

这个数组是从 SHOW TABLES sql 查询中填充的,不幸的是 SHOW TABLES 没有 ORDER BY 参数,所以我认为我最好的选择是将它们添加到数组中并重新排序数组以获得我正在寻找的内容.

【问题讨论】:

  • 你是说你每个月都有桌子吗?如果是这样:为什么???
  • 每个月有一个表似乎是一个严重的数据库设计问题。

标签: php arrays


【解决方案1】:

将月份转换为数值。然后使用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"];
}

【讨论】:

    【解决方案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)
    

    【讨论】:

      【解决方案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;
      }
      

      【讨论】:

        【解决方案4】:

        不可能将数组作为独立数组进行排序,因为系统无法知道一月先来,二月之后等。您可以先定义一个哈希,例如

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

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

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

        【讨论】:

          【解决方案5】:

          您可以按照以下步骤进行

          1. 获取 SHOW TABLES 的输出,这将是月份的未排序列表(“April”、“August”、“February”)
          2. 将其传递给 switch case 如下
            $output_show_tables = ("四月"、"八月"、"二月") $order_month_list = 数组(); foreach($output_show_tables as $month){

          开关($月) 案例“一月”: $order_month_list[1] = 一月;休息; $order_month_list[2] = 二月;休息; .. ... $order_month_list[12] = 十二月;休息;

          }

          1. 现在你得到月份的订单列表

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            • 2021-05-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多