我有一个像这样的csv文件
a,b,c
d,e,f
Thdj,jj,jjj,gg
假设a,d和Thdj是时间戳,我如何按降序排序这些行(从最近的时间戳到未来的更远),删除过去的时间戳?
我必须打印这样的输出 表
10/12/2017 |吧| FOO
22/12/2017 |垃圾邮件|蛋
我被困在那里
<?php
$i=array();
$e=array_map('str_getcsv', file('0.csv'));
foreach ($e as $o){
array_push($i,$o[0]);
}
echo var_dump($i);
?>
我得到的结果是
array(3){[0] =&gt; string(1)“a”[1] =&gt; string(1)“d”[2] =&gt; string(4)“Thdj”}
答案 0 :(得分:0)
试试这个(在php 5.6中测试):
<?php
// timestamps before this date will be ignored
$filter_date = new DateTime();
// stores all rows with timestamp after filter_date
$rows = [];
// read csv
$file = fopen('test.csv', 'rb');
while ($row = fgetcsv($file)) {
$row_date = DateTime::createFromFormat('d/m/Y', $row[0]);
if ($row_date >= $filter_date) {
// add date to row for ordering function
array_unshift($row, $row_date);
// store row
$rows[] = $row;
}
}
fclose($file);
// sort rows by datetime objects
usort($rows, function ($a, $b) {
if ($a[0] < $b[0]) {
return -1;
}
if ($a[0] > $b[0]) {
return 1;
}
return 0;
});
// output rows
foreach ($rows as $row) {
// remove datetime object from each row before printing
array_shift($row);
echo implode(' | ', $row) . "\n";
}
使用此csv文件:
08/12/2017,bar,foo
22/12/2017,spam,eggs
10/12/2017,bar,foo
给出这个输出:
10/12/2017 | bar | foo
22/12/2017 | spam | eggs
如果您的CSV文件包含unix时间戳而不是d / m / Y,则可以将DateTime::createFromFormat
行更改为DateTime::createFromFormat('U', $row[0])
以读取时间戳,然后使用datetime对象&# 39; s format
方法以您喜欢的任何格式输出时间戳。