How to fix "Uncaught Error: Call to a member function insertOne() on null" in php

How to fix "Uncaught Error: Call to a member function insertOne() on null" in php

我按照此处介绍的解决方案 创建了一个新的 csv 文件,并将大型 csv 文件的特定列提取到新文件中。 但是,我收到此错误:未捕获错误:在 null 上调用成员函数 insertOne()。

代码如下:

php

$new= Writer::createFromPath('path\to\file', 'w+');
$filename= Reader::createFromPath($filename, 'r');
          $filename->setOffset(1);
          $filename->each(function ($row) use ($indexes) {
            $new->insertOne($row);
            return true;
          });

问题是新变量未定义。我也试过了

php
$new= Writer::createFromFileObject(new SplTempFileObject());

但是我得到了同样的错误。

在 PHP 中,如果要引用在函数外部定义的变量,则必须 (a) 在匿名函数签名中使用 use 限定符或 (b) 使用global 函数内的语句。

在你的例子中,你有一个 use 限定符,但它引用了一个变量 $indexes。我在您的代码中没有看到 $indexes 变量,因此您需要将 $new 添加到该列表或将 $indexes 替换为 $new.

$new = Writer::createFromPath('path\to\file', 'w+');
$filename = Reader::createFromPath($filename, 'r');
$filename->setOffset(1);
$filename->each(function ($row) use ($new) {
    $new->insertOne($row);
    return true;
});

要select 仅$indexes 变量中指定的索引,您应该select 来自$row 的某些键,然后重建一个新行。您可以使用 array_flip and array_intersect_key 来做到这一点。

// convert [cat, dog] => [cat => 0, dog => 1]
$indexKeys = array_flip($indexes);
$filename->each(function ($row) use ($new, $indexKeys) {
    $selectedCols = array_intersect_key($row, $indexKeys);
    $new->insertOne($selectedCols);
    return true;
});