首页 > 解决方案 > 根据日期对多维数组进行排序

问题描述

我在文件中有文本形式的日期和名称,例如

2-4-2020,bat
14-3-2020,ball
25-6-2019,purse
27-8-2019,rice

所以我试图按升序对其进行排序

<?php
$newdates=$mydates=array();    
$lines = file('n:/mydata.txt');    
foreach($lines as $data)
{
    $mydates[]=explode(',',$data);
}  

$countdates=count($mydates);    
for ($i=0;$i<$countdates;$i++){
    $chkdate=$mydates[$i][0];
    $currentdate=DateTime::createFromFormat('d-m-Y', $chkdate)->format('d-m-Y');
    $mydates[$i][0]=$currentdate;
}  
array_multisort($mydates);
$newdates=$mydates;    
$file = fopen("n:/newdates.txt","w");
foreach ($newdates as $contentline)
{
    fputcsv($file,$contentline);
}    
fclose($file);

但它根本没有排序

标签: phpsorting

解决方案


它可能做得更简单一些。您需要使用usort()strtotime()功能。

这是简化的示例

$mydates= array(
    ['2-4-2020','bat'],
    ['14-3-2020','ball'],
    ['25-6-2019','purse'],
    ['27-8-2019','rice']
    );

usort($mydates, function($a,$b) {
    return strtotime($a[0]) > strtotime($b[0]);
});

foreach ($mydates as $contentline) {
    echo json_encode($contentline);
}

推荐阅读