2014-07-17 36 views
0
$data = array( 
    array("firstname" => "Mary", "age" => 25,"date" => '14/07/2014 04:50'), 
    array("firstname" => "Amanda","age" => 18 ,"date" => '14/07/2014 13:20'), 
    array("firstname" => "James", "age" => 31 ,"date" => '10/07/2014 03:00'), 
    array("firstname" => "Patricia","age" => 7 ,"date" => '09/07/2010 06:32'), 
    array("firstname" => "Michael", "age" => 43 ,"date" => '10/01/2010 04:50'), 
    array("firstname" => "Ranga","age" => 23,"date"=> '08/06/1990 03:52'), 
    array("firstname" => "Sarah","age" => 24 ,"date" => '08/06/1991 04:25'), 
    array("firstname" => "Patrick","age" => 27 ,"date" => '19/07/2002 04:50'), 
); 

function compare_date($a, $b) { 
    return strnatcmp($a['date'], $b['date']); 
} 

usort($data, 'compare_date'); 

print_r($data); 

这不起作用。请帮忙。通过在php中使用日期对阵列的数组进行排序

+0

你不解释它是如何失败的工作,但它是相当明显,字母顺序是不是日期有趣。你不能简单地使用实际的日期(时间戳或日期时间对象)? –

回答

0

通过比较它们的日期,而不是自然秩序

function compare_date($a, $b) { 
    return (strtotime(str_replace('/', '.', $a['date'])) < strtotime(str_replace('/', '.', $b['date']))) ? -1 : 1; 
} 

14/07/2014 04:50假设14是一天,7是月份。但strtotime会以相反的方式看到他们。我正在取代/。所以

14/07/2014 04:50变为2014年7月14日04:50

2014年7月14日04:50将适当地的strtotime解释

+0

谢谢....它的工作... – Ranga

0

你应该yyyy-mm-dd H:i:s格式使用日期,例如,“2014年5月3日13时09分01秒”

当你比较两个字符串,它比较了自然秩序http://php.net/manual/en/function.strnatcmp.php。 考虑这两个日期14/07/2014 04:5020/07/2013 04:50

如果你比较喜欢的是,第二个会更大,但你可以看到第一个是因为今年2014

编辑的更大,:转换它在比较必要的格式,像

date("Y-m-d H:i", strtotime('20/07/2013 04:50')) 
+0

谢谢你....但我想排序D/M/YH:我:S格式... '14/07/2014 04:50' – Ranga

+0

@Ranga - 这就是你目前的代码所做的,你已经说“它不工作”。 –

2

使用几个DateTime对象来比较两个值。您可以使用该方法DateTime::createFromFormat这些对象:

function compare_date($a, $b) { 
    return DateTime::createFromFormat("d/m/Y H:i",$a['date']) > DateTime::createFromFormat("d/m/Y H:i",$b['date']); 
} 
+0

使用'DateTime'比我替换/ with更优雅。 – cornelb

相关问题