【问题标题】:all csv export data is in one column所有 csv 导出数据都在一列中
【发布时间】:2015-04-19 07:32:48
【问题描述】:

我有 csv 导出代码,我正在使用,但问题是所有数据都在 csv 中导出为一列。但我需要数据必须是列分隔的,

 
 <?php
 $results= array(0=>array(name => "anil",agency=>"",phone=>"234235",cname=>"Atleta"),1=>array(name => "anil",agency=>"",phone=>"234235",cname=>"Atleta"));
 $column = array("name","cname","agency","phone");
		$writecolumn = array("Nome do Artista","Categoria","Agencia","Telefone");
		$csv_export='';
		for($i = 0; $i < count($column); $i++)
		{
		    $csv_export.= $writecolumn[$i]."\t" ;
		}
		$csv_export.= "\n";
		for($j = 0; $j < count($results); $j++)
		{
		    for($i = 0; $i < count($column); $i++)
		    {
			$csv_export.= $results[$j][$column[$i]]."\t"; 
		    } 
		    $csv_export.= "\n";
		}		
	  
	    $categoryname=$results[0]['cname'];
	    $filename = $categoryname."-Category-Artist-Data.csv";
	    header('Content-type: application/csv');
	    header('Content-Disposition: attachment; filename='.$filename);
	    echo $csv_export;
	    exit;        
    ?>

【问题讨论】:

  • 您当前使用制表符 (\t) 作为分隔符。因此,您的数据以多列形式导出,但您使用该文件的应用程序可能需要另一个分隔符。
  • 我的代码也面临同样的问题,目前我正在使用 symphony,我正在使用相同的代码导出数据..但我也遇到了同样的问题
  • 我使用的是 Ubuntu 操作系统。

标签: php export-to-csv


【解决方案1】:

您的代码有分隔符(值分隔符)是“制表符”(“\t”)。可能是您的 CSV 阅读软件需要一些配置才能开始使用 'tab' ('\t') 作为分隔符。我在下面更新了您的代码并使用“,”作为分隔符。 Microsoft Excel 使用“,”作为默认分隔符。请尝试以下代码,

 
 <?php
                $results= array(0=>array('name' => "anil",'agency'=>"",'phone' =>"234235",'cname'=>"Atleta"),1=>array('name' => "anil",'agency'=>"",'phone'=>"234235",'cname'=>"Atleta"));
                $column = array("name","cname","agency","phone");
		$writecolumn = array("Nome do Artista","Categoria","Agencia","Telefone");
		$csv_export='';
		for($i = 0; $i < count($column); $i++)
		{
		    $csv_export.= $writecolumn[$i]."," ;
		}
		$csv_export.= "\r\n";
		for($j = 0; $j < count($results); $j++)
		{
		    for($i = 0; $i < count($column); $i++)
		    {
			$csv_export.= $results[$j][$column[$i]].","; 
		    } 
		    $csv_export.= "\r\n";
		}		
	  
	    $categoryname=$results[0]['cname'];
	    $filename = $categoryname."-Category-Artist-Data.csv";
	    header('Content-type: application/csv');
	    header('Content-Disposition: attachment; filename='.$filename);
	    echo $csv_export;
	    exit;        
    ?>

【讨论】:

  • 我已经尝试过了,但没有找到解决方案,但是,当我检查标签时,一切正常。
  • 我很沮丧,如果您有任何其他解决方案,请告诉我
  • 以上代码应该可以工作。上面的代码不起作用吗?您能否详细介绍一下您的问题?
【解决方案2】:

使用array_reduce,通过对每个元素应用函数,将数组简化为单个值,并将初始值作为第三个参数传递,类似这样:

$result= array(0=>array(name => "anil",agency=>"",phone=>"234235",cname=>"Atleta"),1=>array(name => "name_anil",agency=>"agency2",phone=>"234235",cname=>"Atleta_2"));
$csv_export = array_reduce($result, function($acc,$row) {
    foreach($row as $key => $value) {
        $acc .= $value;
        $acc .= "\t";
        }
    $acc .= "\n";
    return $acc;
    },
    "Nome do Artista\tCategoria\tAgencia\tTelefone\n")
$categoryname=$results[0]['cname'];
$filename = $categoryname."-Category-Artist-Data.csv";
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);
echo $csv_export;
exit;

【讨论】:

  • 我很困惑,你能分享你的完整代码还是用我的代码编辑。
  • 像旧的一样工作......但我的问题并没有解决,,我正在使用 ubuntu 系统
  • 其实我用的是Ubuntu操作系统,有一些选项,如制表符、逗号、空格复选框,当取消选中所有复选框时,同样的问题,所有数据在一列中。跨度>
  • 其实你可以使用不同的分隔符,试试上面代码中的“,”而不是“\t”,看看是否有效,前提是你在打开文件时选中了“逗号”选项。
猜你喜欢
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 2018-01-13
  • 2021-08-12
  • 2016-05-23
  • 1970-01-01
相关资源
最近更新 更多