我有一个包含三列的CSV文件:
玛丽,150203_15:29:12,150203_16:10:12
约翰,150203_15:29:17,待
彼得,150203_15:29:35,150203_15:49:35
奥尔加,150203_15:30:43,以待
...
..
。
玛丽,150204_15:42:14,以待
彼得,150204_20:42:14,以待
因为该文件中有很多条目,所以我想要做的就是
根据用户名查找最新条目并更改最后一个值(从挂起到日期())。
在上面的示例中,我想要更改第3列中从挂起到日期的最新Mary条目。然后用当前的CSV文件替换更新的CSV文件。
关于如何处理的任何想法?
谢谢
答案 0 :(得分:0)
您可以将该文件作为一个巨大的字符串使用并进行字符串替换。
$data = file_get_contents('your_file.csv');
$data = str_replace('Joe,150203_16:21:43,pending','Joe,15203_16:21:43,15204_15:23:43',$data);
file_put_contents('your_file.csv', $data);
下面的评论引起了人们的关注,即找出姓名的最新日期。这也很简单。假设您已加载$ data,如上所述......
$matches = array(); // Just to point out that this is an array
preg_match_all("/Joe,(.*),/", $data, $matches);
现在,$ matches [1]包含Joe的所有日期。你只想要那些待定的吗?没问题......
preg_match_all("/Joe,(.*),pending/", $data, $matches);
现在,$ matches [1]仅包含待定日期。哪个是最近的?
rsort($mathes[1]);
现在,$ matches [1] [0]是最近的日期。所以,你可以这样做:
$data = str_replace('Joe,'.$matches[1][0].',pending','Joe,'.$matches[1][0].',15204_15:23:43',$data);
这是绝对最有效的方法吗?不,难道难受吗?不,您应该考虑使用正确的数据库,但可能使用csv文件。
答案 1 :(得分:0)
如果在您的情况下将数据移动到数据库不是解决方案,则可以执行以下操作:
答案 2 :(得分:0)
我实际上找到了一个更简单的解决方案。是我能想到的最简单的一个。
$line = $_SESSION[username].",".$_SESSION[LOGIN_TIME].",".'pending'."\r\n";
$newline = $_SESSION[username].","$_SESSION[LOGIN_TIME].",".date("ymd_H:i:s"). "\r\n";
$data = file_get_contents('login.log');
$data = str_replace($line,$newline,$data);
file_put_contents('login.log', $data);
因此无需扫描最新条目。我只是存储以前的条目值,并用新的值替换它们。
谢谢kainaw和BigScar