我按照此处介绍的解决方法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());
但是我遇到了同样的错误。
答案 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_flip和array_intersect_key来做到这一点。
$indexes