【问题标题】:How to write and take the right values needed from a csv file using PHP?如何使用 PHP 从 csv 文件中写入和获取所需的正确值?
【发布时间】:2018-08-13 06:58:55
【问题描述】:

以前我有两张桌子。 我有一个 php 脚本将一个表的内容复制到表 2,以识别复制的 id 我制作了一个 csv 文件来检查插入的最后一行 id,如下所示

 "Date",lastid(int)

之前我通过使用 fopen 作为 0 和 1 使用 csv 的索引来检查最后一个 id。

但现在我有另一个表 3 复制到表 2,过程是相同的。但是当我为新表写入时,它会被覆盖,所以我无法识别前一个表。如果我附加它,文件将得到扩展。有什么办法可以把表1的内容放在第一行,表2的最后一个id放在第二行

  "Date",lastid(int), // for t1 copied to t2
  "Date",lastid(int)  // for t3 copied to t2

表 1 取 0、1,表 2 取 2,3。即使先完成表 2。

public function writeNumberOfRowsCopiedForTable2FromTable1($row_write)
{
    $file = fopen('rowsCopied.csv', 'w+');
    fputcsv($file, $row_write);
    fclose($file);

}

调用它

writeNumberOfRowsCopiedForTable2FromTable1([$this->global_date, $last_row_copied]);

从 t1 获取 t2 中插入值的值

 public function getLastRowCopied()
{
    $end_row_id = 0;
    if (file_exists('rowsCopied.csv')) {
        $handle       = fopen('rowsCopied.csv', 'r');
        $data         = fgetcsv($handle);
        $end_row_id += intval($data[1]);
        $this->global_date = $data[0];
        fclose($handle);
    }
    return $end_row_id;

}

希望我解释了这个问题。 有人知道答案吗?

【问题讨论】:

  • 能否包含您当前的代码,它会有所帮助。虽然我不确定这是做你想做的事的好方法。
  • @NigelRen 我已经更新了代码。你能检查一下吗?

标签: php csv fopen


【解决方案1】:

我已经编写了一些方法,它们应该可以满足您的需求。您需要将它们与您当前使用它们的方式集成,但这只是为了让我自己测试它们。

每个方法都有一个$rowNumber 参数,这是存储文件中要设置/获取值的行。在代码中它对其进行了调整,因此第 1 行实际上是数组的元素 0。我使用file() 读取整个文件,然后获取/设置您感兴趣的行。在writeNumberOfRowsCopied 方法中,它使用file_put_contents() 一次性写出整个文件(内爆文件)。

function writeNumberOfRowsCopied($rowNumber, $row_write)
{
    $fileName = 'rowsCopied.csv';
    $file = file($fileName, FILE_IGNORE_NEW_LINES);

    $file[$rowNumber-1] = implode(",", $row_write);
    file_put_contents($fileName, implode(PHP_EOL, $file));
}

function getLastRowCopied($rowNumber)
{
    $fileName = 'rowsCopied.csv';
    $file = file($fileName, FILE_IGNORE_NEW_LINES);

    $row = explode(",", $file[$rowNumber-1]);
    return (int)$row[1];
}
writeNumberOfRowsCopied(2, ["aa", 22121]);
print_r(getLastRowCopied(2));

【讨论】:

  • 感谢您的回答 :) 我会检查这是否适合我。
猜你喜欢
  • 2012-05-28
  • 1970-01-01
  • 2013-11-22
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
相关资源
最近更新 更多