繁体   English   中英

使用PHP更改CSV文件中的条目

[英]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文件。

如果将数据移动到数据库不是您的解决方案,则可以执行以下操作:

  1. 通过fgetcsv()逐行将CSV文件读入PHP文件
  2. 根据您的条件对数组进行排序并获取最新条目
  3. 更新条目
  4. 通过fputcsv()将条目写回文件

我实际上找到了一个更简单的解决方案。 是我能想到的最简单的一个。

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM