[英]Change entry in a CSV file with PHP
我有一个包含三列的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文件。
有关如何处理的任何想法?
谢谢
您可以将该文件作为一个巨大的字符串使用并进行字符串替换。
$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文件。
如果将数据移动到数据库不是您的解决方案,则可以执行以下操作:
我实际上找到了一个更简单的解决方案。 是我能想到的最简单的一个。
$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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.