我需要使用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 :(得分: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 :(得分: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'];
}
}
试试这个
答案 2 :(得分:0)
哟可以使用以下方式做一些优雅:( usort:使用用户定义的比较函数按值对数组进行排序
<div class="container text-center">
<div class="row">
<div class="col-sm-4 col-lg-3 col-lg-push-9">
<div class="alert alert-warning">A</div>
</div>
<div class="col-sm-4 col-lg-3 col-lg-pull-3">
<div class="alert alert-info">B</div>
</div>
<div class="col-sm-8 col-lg-6 col-lg-pull-3">
<div class="alert alert-danger">C</div>
</div>
</div>
</div>
答案 3 :(得分: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)。显然,为数组选择一个较短的名称^^
希望这有帮助。