首页 > 解决方案 > 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 的代码可能被格式化了?

标签: phparrayslaravelmultidimensional-arrayexport-to-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();


推荐阅读