2016-03-02 24 views
0

排序根据日期阵列我需要根据日期使用PHP降序排序数组对象。我尝试了下面的代码,但没有得到预期的结果。你能建议做这个任务吗?提前致谢。如何降序

$document_list = array('01-14-2013', '01-12-2013', '04-05-2016'); 
usort($document_list, array($this, "sortByDate")); 

function sortByDate($a, $b) { 
    return strcmp($b['createdDate'], $a['createdDate']); 
} 

当我试着这个代码,它得到错误的输出。

+0

检查[link](http://stackoverflow.com/questions/15557373/php-sort-array-by-date-value) – Yash

+0

使用'usort($ document_list,“sortByDate”);' – jitendrapurohit

回答

0

对于这种方法,你需要的日期格式&日期转换为时间戳。

$document_list = array('14-01-2013', '12-01-2013', '05-04-2016'); 
$document_list= array_map(function($v) { 
    return date('Y-m-d', strtotime($v)); 
}, $document_list); 

function sortByDate($a, $b) { 
    return strtotime($b) - strtotime($a); 
} 

usort($document_list, "sortByDate"); 

$document_list= array_map(function($v) { 
    return date('m-d-Y', strtotime($v)); 
}, $document_list); 

输出

array(3) { 
    [0]=> 
    string(10) "04-05-2016" 
    [1]=> 
    string(10) "01-14-2013" 
    [2]=> 
    string(10) "01-12-2013" 
} 
+1

但你是在最终结果中更改整个日期格式?我相信数组元素的格式应该保持原样。 – mitkosoft

+0

@mitkosoft。更新。 –

0
$document_list = array('01-14-2013', '01-12-2013', '04-05-2016'); 
usort($document_list, array($this, "sortByDate")); 

function sortByDate($a, $b) { 
    if(strtotime($b['createdDate'])<strtotime($a['createdDate'])){ 
     return $a['createdDate']; 
    }else{ 
     return $b['createdDate']; 
    } 
} 

尝试此

0

哟可以做一些优雅像这样使用:(usort:排序通过使用用户定义的比较函数值的数组

<?php 
    // Sort the multidimensional array 
    usort($document_list, "custom_sort"); 
    // Define the custom sort function 
    function custom_sort($a,$b) { 
      return $a['some_sub_var']>$b['some_sub_var']; 
    } 
?> 
0

就我个人而言,由于日期时间格式的内部冲突,我发现按日期排序数组是一个不可扩展的选项。下面可能不会完全回答这个问题,但如果使用从数据库中获取的数组,则可能会有所帮助。

假设在你的桌子上有一个主要的自动递增“ID”列,那么你可以随时ORDER BY id_column DESC。您将收到与按日期排序相同的结果 - 但速度要快得多。

如果由于某种原因,你无法通过SQL直接使用ORDER BY ID DESC,根据您的情况下通过these functions在PHP只是重组阵列。


补充说明:预览以上PHP排序功能的实验中,我强烈建议通过可视化等片段的阵列显示器,我发现某处php.net上的郊区 -

function visual_arr($arr){ 
    echo '<pre>'; 
    print_r($arr); 
    echo '</pre>'; 
} 

调用它 - 只需在项目文件中的某处使用它:visual_arr($ the_array_you_want_to_display_in_human_radable_format)。显然,选择适合您的阵列^^

希望这有助于较短的名称。