php - Laravel 中的多维数组到 CSV
问题描述
我有一个 Laravel 应用程序,它运行一个命令来将技术人员分配给 csv 中列出的工作。将 csv 解析为一个数组,并在添加元素之前根据业务需求对数组进行过滤。我在生成 csv 时遇到问题,因为当我点击 URI 时收到的错误是“无法访问站点。Err Invalid Response”。
这是我从函数结果中获得的数组示例。
array (
)array (
21 =>
array (
'JobNumber' => '2',
'JobType' => '3',
'Node' => '10',
'fname' => 'RICARDO',
'lname' => 'SMITH',
'RAddress' => 'SUGARAPPLE ST',
'HomePhone' => '3924651',
'WorkPhone' => '3276200',
'RTime' => '10-12',
'Comment' => 'FROM POLICE STATION, EAST INTO PINEWOOD..3RD LFT ONTO SUGARAPPLE ST; 5TH HSE ON RGT; BEIGE/YELLW #19',
'FTax' => '1.00',
'Tag' => '010106',
'QuotaGroup' => '1.00',
'Cust_Acct' => '10221401',
'offernum' => '2136370',
'installer' => 'Aaron Cash',
),
122 =>
array (
'JobNumber' => '30',
'JobType' => '3',
'Node' => '213',
'fname' => 'MONIQUE',
'lname' => 'SAWYER NAIRN',
'RAddress' => 'SUTTON ST',
'HomePhone' => '8017750',
'WorkPhone' => '2250417',
'RTime' => '10-12',
'Comment' => 'TRN ONTO KEMP RD FRM SHIRLEY ST, 1ST LFT BY LODGE BLDG, 2ND RT, UNPAINTED HSE AT DEAD END. #13 ...SDW',
'FTax' => '1.00',
'Tag' => '213308',
'QuotaGroup' => '1.00',
'Cust_Acct' => '11390602',
'offernum' => '2137494',
'installer' => 'Wayne Forbes',
控制器:
<?php
namespace App\Http\Controllers;
use App\Console\Commands\NPInstallersAssigner;
use Illuminate\Http\Request;
class GetCsvController extends Controller
{
public function getCsv()
{
$npinstallerassigner = new NPInstallersAssigner();
$results = $npinstallerassigner->assignEasternJobs();
$filename = 'userData.csv';
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$filename");
$output = fopen("php://output", "w");
$header = array_keys($results[0]);
fputcsv($output, $header);
foreach ($results as $row) {
fputcsv($output, $row);
}
fclose($output);
}
}
我相信用于将数组执行到 csv 的代码可能被格式化了?
解决方案
也许尝试添加一个缓存控制标头,并用引号将文件名封装在标头中,并且不要忘记在完成输出后退出脚本。
header('Content-Type: text/csv; charset=utf-8', true);
$file_name = 'userData.cvs';
header('Cache-Control: no-cache, must-revalidate');
header('Content-Disposition: attachment; filename="'.$file_name.'.csv"', true);
$output = fopen('php://output', 'w');
/// write to cvs
exit();
推荐阅读
- android - 我应该为 appium 测试脚本使用什么样的驱动程序
- configuration - Asp.Net Core 在多个 API 之间共享公共服务注册
- php - PHP Simple XML 访问图像 url 元素值
- java - FragmentManager 中的 IllegalStateException -> restoreAllState():找不到索引为 -1 的活动片段
- ansible - 如何检查字典键是否为空
- python - 有没有办法堆叠一组 TIFF 图像并使用 mayavi 重建成 3D 体积?
- keras - 在 Keras 自定义层中乘以 3 个矩阵
- c# - 通过 UIElement.TranslatePoint 计算子元素中心偏离正确值
- python - python3在十六进制中的奇怪行为
- reactjs - 有一个带有路由和路由的反应应用程序在刷新时出错。可能是什么原因?