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];
}
}
}
看一看线程。也许你的目标是做一个验证看看线程。也许你的目标是进行验证