Php 在laravel 5.8中导入excel文件后管理文件数据遇到问题

Php 在laravel 5.8中导入excel文件后管理文件数据遇到问题,php,arrays,laravel,vue.js,laravel-excel,Php,Arrays,Laravel,Vue.js,Laravel Excel,我想通过导入excel文件一次发送多封电子邮件。现在,我正在导入excel文件,并将数据作为数组保存到变量中。 我使用的是maatwebsite/excel版本3.1。导入后,文件数据以嵌套数组的形式存储到变量中,excel文件列的其余部分也保留空值。我尝试使用array\u filter,但效果不佳。这是我现在得到的回应的截图- 在EmailsController中- public function sendEmailUsingFileAndSave(Request $request) {

我想通过导入
excel
文件一次发送多封电子邮件。现在,我正在导入
excel
文件,并将数据作为数组保存到
变量中。
我使用的是
maatwebsite/excel版本3.1
。导入后,文件数据以嵌套数组的形式存储到变量中,excel文件列的其余部分也保留空值。我尝试使用
array\u filter
,但效果不佳。这是我现在得到的回应的截图-

在EmailsController中-

public function sendEmailUsingFileAndSave(Request $request)
{
    //here is $content, $fromemail, $fromname etc..

    $file = $request->file('file');

    $import = new EmailsImport;
    Excel::import($import, $file);
    return $emails = $import->data;
    foreach($emails as $email)
    {
        Mail::send('email.content', ['content' => $content], function($message)
             use ($email, $subject, $fromemail, $fromname) {
                  $message->to($email)->subject($subject);
                  $message->from($fromemail, $fromname);
             });
     }
}
app\imports
文件夹
EmailsImport.php
中-

<?php

namespace App\Imports;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\WithValidation;

class EmailsImport implements ToCollection, WithValidation 
{
    use Importable;

    public $data;

    public function collection(Collection $rows)
    {
        $this->data = $rows;
    }
 }

所以你的问题是过滤部分

然后添加以下代码:

Excel::import($import, $file);

$emails = [];
foreach ($import->data as $item) {
  $item = array_filter($item, function($value) { return !is_null($value) && $value !== ''; });
  foreach ($item as $i) {
    $emails[] = $i;
  }
}

foreach($emails as $email)

那么你的问题是过滤部分

然后添加以下代码:

Excel::import($import, $file);

$emails = [];
foreach ($import->data as $item) {
  $item = array_filter($item, function($value) { return !is_null($value) && $value !== ''; });
  foreach ($item as $i) {
    $emails[] = $i;
  }
}

foreach($emails as $email)

您的问题是,
Maatwebsite\Excel
将Excel文件中的一些空单元格视为行的一部分,因此当您使用
收集
界面并将
$this->data
设置为等于$rows时,您正在将二维数组分配到
$this->data

有很多方法可以解决这个问题,但我建议在
$rows
集合上使用foreach循环,并仅将每行的第一个单元格添加到
$this data
,尝试以下操作:

class EmailsImport implements ToCollection, WithValidation 
{
    use Importable;

    public $data = [];

    public function collection(Collection $rows)
    {
        foreach ($rows as $row) {
            $this->data[] = $row[0];
        }
    }
 }

您的问题是,
Maatwebsite\Excel
将Excel文件中的一些空单元格视为行的一部分,因此当您使用
收集
界面并将
$this->data
设置为等于$rows时,您正在将二维数组分配到
$this->data

有很多方法可以解决这个问题,但我建议在
$rows
集合上使用foreach循环,并仅将每行的第一个单元格添加到
$this data
,尝试以下操作:

class EmailsImport implements ToCollection, WithValidation 
{
    use Importable;

    public $data = [];

    public function collection(Collection $rows)
    {
        foreach ($rows as $row) {
            $this->data[] = $row[0];
        }
    }
 }
看一看线程。也许你的目标是做一个验证看看线程。也许你的目标是进行验证