【问题标题】:Sort a csv file by first column timestamp按第一列时间戳对 csv 文件进行排序
【发布时间】:2018-05-24 02:27:41
【问题描述】:

我有一个这样的 csv 文件

a,b,c
d,e,f
Thdj,jj,jjj,gg

假设 a、d 和 Thdj 是时间戳,我如何按降序(从最近的时间戳到未来更远的时间戳)对这些行进行排序,删除过去的时间戳?

我必须打印这样的输出 表


2017 年 10 月 12 日 |酒吧 |呵呵


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]=> string(1) "a" [1]=> string(1) "d" [2]=> string(4) "Thdj" }

【问题讨论】:

    标签: php arrays csv sorting timestamp


    【解决方案1】:

    试试这个(在 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 对象的 format 方法以您喜欢的任何格式输出时间戳。

    【讨论】:

    • 抱歉,我的服务器上安装了 PHP 5.6
    • 我应该用什么来代替“”(宇宙飞船操作员)?
    • 我已经更新了 php 5.6 的答案,删除了 &lt;=&gt; 运算符
    猜你喜欢
    • 2021-07-21
    • 2014-12-02
    • 2015-12-24
    • 2013-06-18
    • 2021-07-21
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    相关资源
    最近更新 更多