В PHP, если вы хотите сослаться на переменную, определенную вне функции, вы должны либо (а) использовать квалификатор use
в сигнатуре анонимной функции, либо (б) использовать оператор global
внутри своей функции.
В вашем случае у вас есть квалификатор использования, но он ссылается на переменную $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;
});
Чтобы выбрать только индексы, указанные в переменной $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;
});