如何在PHP中修复“未捕获的错误:在null上调用成员函数insertOne()”

时间:2019-04-01 22:23:11

标签: php csv flysystem thephpleague

我按照此处介绍的解决方法https://stackoverflow.com/a/36041188/11295637创建了一个新的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());

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

1 个答案:

答案 0 :(得分:0)

在PHP中,如果要引用在函数外部定义的变量,则必须(a)在匿名函数签名中使用<referenceBlock name="product.info.addtocart" remove="true" /> 限定符,或(b)使用use语句在您的函数内部。

在您的情况下,您具有使用限定符,但它引用了变量global。我没有在代码中看到$ indexes变量,因此您需要将$ new添加到该列表中,或将$ indexes替换为$ new。

$indexes

要仅选择$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; }); 变量中指定的索引,应从$ row中选择某些键,然后重新构建新行。您可以使用array_fliparray_intersect_key来做到这一点。

$indexes