2011-12-02 31 views
3
$array = array("2011-September_38","2011-June_4","2010-November_9","2011-November_29","2010-December_19"); 

我想这个字符串数组如下分类时,应先进行排序的一年,那么它应该每月进行排序,如何从PHP中的值数组中排序特定的字符串?

所需的输出

Array ([0] => 2010-Marh_19 
     [1] => 2010-November_9 
     [2] => 2011-June_4 
     [3] => 2011-September_38 
     [4] => 2011-November_29) 

我试过的东西,任何人都可以绑定我的功能排序年月http://codepad.org/skEiUkTC

+0

顺便说一句' “2010年Marh_19”'是不是你的数组中所以它不能在所需的o utput :) – anubhava

回答

2

试试这个代码:

<?php 
$array = array("2011-September_38","2011-June_4","2010-November_9","2011-November_29","2010-December_19"); 
function monthCompare($a, $b) { 
    $da = strtotime(strstr($a, '_', true)); 
    $db = strtotime(strstr($b, '_', true)); 
    return $da > $db; 
} 
usort($array, "monthCompare"); 
print_r($array); 
?> 

输出

Array 
(
    [0] => 2010-November_9 
    [1] => 2010-December_19 
    [2] => 2011-June_4 
    [3] => 2011-September_38 
    [4] => 2011-November_29 
) 
+0

错误:http://codepad.org/mUt7jLPG –

+0

@balaji:请看这里:http://php.net/manual/en/function.strstr.php。由于每本手册:'5.3.0 \t添加可选参数before_needle.'这意味着你需要有至少PHP版本5.3.0使用的功能的strstr这个额外的参数。如果您没有php 5.3.0或以上版本,请告诉我,我可以为您提供替代解决方案。 – anubhava

+0

我当试图解决这个问题,我建议你看一看它也发现了DateTime类,它可以让你通过里面的strtotime周围的strstr搞乱在一个非常干净的方式与时间来工作,而不是能力:-) –

1

所以一个简单的解决方案是,将每个值转换为对象与DateTime::createFromFormat,排序吨下摆,然后再输出这些值。

之前我看到这个问题,我从来没有与datetime对象出场,但他们真棒,易于使用,并createFromFormat使得完美感。

$array = array("2011-September_30","2011-June_4","2010-November_9","2011-November_29","2010-December_19"); 

foreach($array as $item) 
{ 
    $timestamps[] = DateTime::createFromFormat('Y-F_d',$item); 
} 

sort($timestamps); 

foreach($timestamps as $timestamp) 
{ 
    $newarray[] = $timestamp->format('Y-F_d'); 
} 

会给你

Array 
(
    [0] => 2010-November_09 
    [1] => 2010-December_19 
    [2] => 2011-June_04 
    [3] => 2011-September_30 
    [4] => 2011-November_29 
) 
+0

根据OP数组元素不是'YYYY-Month_dd'格式的日期。它实际上是'YYYY-Month_ID'其中ID可以是任何数字,如68或95 – anubhava

+0

你必须知道具体的问题,因为我无法从问题中读出这样的。 –

+0

不是你的错,其实早OP留下评论,表明这里:http://stackoverflow.com/questions/8351929/how-one-can-sort-an-array-of-values-by-year-and-month -in-php – anubhava

相关问题