如何将特定列从 XLSX 导入数组 (Laravel)?

How do I import specific columns from XLSX to an array (Laravel)?

我需要将 table 导入数组。并且不导入所有单元格,只导入 2 列。

例如,来自

A B C D F
1 2 3 4 5
6 7 8 9 10

[
    {
        'A' => 1,
        'F' => 5,
    },
    {
        'A' => 6,
        'F' => 10,
    }
]

app\Imports\PricesImport.php

<?php

namespace App\Imports;

use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\Importable;

class PricesImport implements ToArray
{
    use Importable;

    public function array(array $rows)
    {
        return array($rows[0], $rows[4]);
    }
}

控制器中的调用:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\PricesImport;
use Maatwebsite\Excel\Facades\Excel;

class SomeController extends Controller
{
    public function import(Request $request) {
        $array = Excel::toArray(new PricesImport, $request->file('file'));
    }
}

但是没有用。我做错了什么?

更新

尝试了这个选项,但是 returns 所有列,而不是 2 个特定列 app\Imports\PricesImport.php

<?php

namespace App\Imports;

use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\Importable;

class PricesImport implements ToArray
{
    use Importable;
    private $data;

    public function __construct()
    {
        $this->data = [];
    }

    public function array(array $rows)
    {
        foreach ($rows as $row) {
            $row = $row->toArray();
            $this->data[] = array('sku' => $row[0], 'price' => $row[4]);
        }
        return $this->data;
    }
}

感谢 Patrick Brouwers 的提示,这成功了: app\Imports\PricesImport.php

<?php

namespace App\Imports;

use Maatwebsite\Excel\Concerns\ToArray;

class PricesImport implements ToArray
{
    private $data;

    public function __construct()
    {
        $this->data = [];
    }
    public function array(array $rows)
    {
        foreach ($rows as $row) {
            $this->data[] = array('sku' => $row[0], 'price' => $row[4]);
        }
    }

    public function getArray(): array
    {
        return $this->data;
    }
}

控制器中的调用:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\PricesImport;
use Maatwebsite\Excel\Facades\Excel;

class SomeController extends Controller
{
    public function import(Request $request) {
        $import = new PricesImport;
        Excel::import($import, $request->file('file'));
        $array = $import->getArray();
    }
}