如何在 php 中修复"Uncaught Error: Call to a member function insertOne() on null"



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

代码如下:

php
$new= Writer::createFromPath('pathtofile', '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('pathtofile', 'w+');
$filename = Reader::createFromPath($filename, 'r');
$filename->setOffset(1);
$filename->each(function ($row) use ($new) {
    $new->insertOne($row);
    return true;
});

若要仅选择$indexes变量中指定的索引,应从$row中选择某些键,然后重新生成新行。您可以使用array_flip和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;
});

相关内容

  • 没有找到相关文章

最新更新