首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用asort()对日期数组进行排序

使用asort()对日期数组进行排序
EN

Stack Overflow用户
提问于 2013-07-21 15:58:08
回答 1查看 269关注 0票数 0

我真的很困惑,我尝试了很多相关的方法来对可能有不同格式的日期进行排序。

我有一系列的日期,例如:

代码语言:javascript
复制
"0"=>"09.10.2012"
"1"=>"02.10.12"
"2"=>"27.09.15"
"2.0"=>"28.09.2012"
"2.1"=>"29.9.2012"
"2.2"=>"29.09.2012"
"3"=>"9.10.2012"
"3.1"=>"23.4.10"
"4"=>"28.09.2012"
"5"=>"26.10.2012"
"6"=>"12.09.98"
"6.0"=>"05.03.2013"
"6.1"=>"23.4.2013"

(键是字符串是有原因的)

现在我知道它们将以相同的格式排列--天、月、年。但是数字数字可以改变,就像在给定数组中看到的那样。

我基本上将它们解析为日月份年( strtotime()根据文档识别的欧洲格式),然后将它们更改为Unix时间戳,我使用asort()对数组进行排序,收到了糟糕的结果:

代码语言:javascript
复制
[6]->[] -- 12.09.98
[1]->[1034380800] -- 02.10.12
[2.0]->[1348790400] -- 28.09.2012
[4]->[1348790400] -- 28.09.2012
[2.2]->[1348876800] -- 29.09.2012
[2.1]->[1348876800] -- 29.9.2012
[3]->[1349740800] -- 9.10.2012
[0]->[1349740800] -- 09.10.2012
[5]->[1351209600] -- 26.10.2012
[6.0]->[1362441600] -- 05.03.2013
[6.1]->[1366675200] -- 23.4.2013
[3.1]->[1681084800] -- 23.4.10
[2]->[1820966400] -- 27.09.15

如您所见,[6](unixtime)包含、False,而strtotime()无法转换日期。

这是我的代码:

代码语言:javascript
复制
function sortArrays_ByDate($target){

        foreach($target as $key_s => $val_s) { $date_exp = preg_replace('#(\.|_)#','-',$val_s); $target[(string)$key_s] = $date_exp; }

        foreach($target as $key_s => $val_s) { $date_exp = strtotime($val_s); $target[(string)$key_s] = $date_exp; }

        asort($target);
         return $target;

}

有人能解释一下怎么回事吗..。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-21 17:02:02

出于某种原因,欧洲-没有工作98,所以我建议编辑年份为4位数字格式:

代码语言:javascript
复制
    function sortArrays_ByDate($target){

        foreach($target as $key_s => $val_s) {
            $day = substr($val_s, 0, strpos($val_s, '.'));
            $month = substr($val_s, strpos($val_s, '.')+1, strrpos($val_s, '.')-strpos($val_s, '.')-1);
            $year = substr($val_s,  strrpos($val_s, '.')+1);

            if($year > 79 && $year <= 99)
                $year = "19" . $year;
            elseif($year >=00 && $year <= 79)
                $year = "20" . $year;

            $target[(string)$key_s] = strtotime($day .'.'. $month .'.'. $year);
        }

        asort($target);

        /*foreach($target as $value)
            echo date("d.m.Y", $value) . '</br>';
        changed for edit time to d.m.Y ->
        */

        foreach($target as $key_s => $val_s)
        $target[(string)$key_s] = date("d.m.Y", $target[(string)$key_s]);

        return $target;
}

然后它对我起作用,数组被正确地排序。

编辑/

结果是:

代码语言:javascript
复制
Array
(
    [0] => 09.10.2012
    [1] => 02.10.12
    [2] => 27.09.15
    [2.0] => 28.09.2012
    [2.1] => 29.9.2012
    [2.2] => 29.09.2012
    [3] => 9.10.2012
    [3.1] => 23.4.10
    [4] => 28.09.2012
    [5] => 26.10.2012
    [6] => 12.09.98
    [6.0] => 05.03.2013
    [6.1] => 23.4.2013
)
Array
(
    [6] => 12.09.1998
    [3.1] => 23.04.2010
    [4] => 28.09.2012
    [2.0] => 28.09.2012
    [2.1] => 29.09.2012
    [2.2] => 29.09.2012
    [1] => 02.10.2012
    [3] => 09.10.2012
    [0] => 09.10.2012
    [5] => 26.10.2012
    [6.0] => 05.03.2013
    [6.1] => 23.04.2013
    [2] => 27.09.2015
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17774157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档