根据日期对多维数组进行排序



我在类似的文件中有文本形式的日期和名称

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);

但它根本没有分类

这可能会简单一点。您需要使用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);
}

您可以使用file函数将文件读取到数组中。然后可以使用usort:对数组进行排序

$fileName = 'n:/mydata.txt';
$lines = file($fileName);
usort($lines, function($a, $b) {
foreach (['a', 'b'] as $variable) {
$parts = explode(',', $$variable);
$$variable = DateTime::createFromFormat('j-n-Y', $parts[0]);
}
return $a < $b ? -1 : 1;
});
file_put_contents(implode("n", $lines), $fileName);

最新更新