【问题标题】:PHP: Check if the value exists in csv filePHP:检查值是否存在于csv文件中
【发布时间】:2016-04-23 07:59:56
【问题描述】:

我在 csv 文件中有一个客户列表:

Name,Credited
ABC,Y
BCD,Y
XYZ
ABC

我的任务是检查客户端是否已经存在于列表中:

  • 如果是,请检查他是否已被记入贷方。
  • 如果是,请从列表中删除该名称。

我已经开始编写代码,但不确定如何完成我的任务。

//Store the file in array
 $fcsv = file($files); 
 foreach($headers as $header) {
    // Push headers to new array.
    array_push($headings, strtolower(trim($header)));
  }

有人可以帮忙吗!

提前致谢

【问题讨论】:

  • 这个变量 $headers.. 你在哪里初始化它,用什么初始化?
  • 嗨 Ed:标题初始化为 $headers = explode(",", $fcsv[0]);
  • 首先,你为什么不使用PHP内置的fgetcsv()函数呢?
  • @MarkBaker。很高兴使用 fgetcsv .. 但我仍然不确定如何使用 Arrays 并实现我想要的输出。对不起,我是 PHP 新手,还在学习..
  • 文件的两列之间真的有可变数量的空格吗?

标签: php


【解决方案1】:

遍历文件中的所有行,并使用str_getcsv() 将其解析为 CSV 行。然后检查第一列是否为客户端名称,第二列是否为Y

$clients = file($files, FILE_IGNORE_NEW_LINES);
$deleted = false;
foreach ($clients as $index => $client_line) {
    $split = str_getcsv($client_line);
    if ($split[0] == $client) {
        if (isset($split[1]) && $split[1] == 'Y') {
            unset($clients[$index]);
            $deleted = true;
        }
        break; // Stop searching after we found the client
    }
}
// Rewrite the file if we deleted the client.
if ($deleted) {
    file_put_contents($files, implode("\n", $clients));
}

【讨论】:

  • 感谢@barmar 的回复。我已经更新了这个问题。文件中有“,”(逗号),而不是空格。
  • 我已将答案更新为使用 str_getcsv 而不是正则表达式。
【解决方案2】:

这是搜索客户端名称是否存在于给定 csv 文件中的基本实现。

$client = "ABC";
$fcsv   = file('uploads/task.csv');

foreach ($fcsv as $key => $value) {
  $temp = explode(',', $value);
  if ($temp[0] == $client) {
    unset($fcsv[$key]);
  }
}

csv 中的每一行,如果您使用 var_dump() 查看它,会如下所示,

"Name,Credited"

如果您的 csv 文件包含多于一行,则此行

$fcsv = file('uploads/task.csv');

将返回行数组,使用loop 拆分每行的内容,使用explode(',', $value);,以便在行的每一列中都有数据。

与上面的示例一样,您现在可以选择需要查看的列,以便您比较客户端存在和删除的位置。

【讨论】:

  • 他的文件里没有逗号,你explode为什么用逗号?
  • 你为什么要测试if ($temp[1] == $client)?在他的文件中,客户名称只是第一列,第二列是Y,如果客户有信用。
  • 同意@Barmar。客户名称始终是第一列,贷方是第二列。
  • 在任何给定的csv文件中,由许多culumn组成,如果您尝试使用php浏览,则以逗号分隔列,
  • 阅读问题,他在开头显示了文件格式。它使用空格将客户名称与Y 分开以表示已记入。
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 2021-01-12
  • 2018-08-04
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多