【问题标题】:PHP semicolon delimited file generationPHP分号分隔文件生成
【发布时间】:2015-05-02 18:52:00
【问题描述】:

我正在使用此代码生成分号分隔的文件:

for ($i = 0; $i < 3; $i = $i+1)
{   
array_push($dataArray,"$dataCell1","$dataCell2","$dataCell3","$dataCell4","$dataCell5","$dataCell6","$dataCell7","$dataCell8","$dataCell9","$dataCell10","$dataCell11");

$stringData = rtrim(implode(';', $dataArray), ';'); //rtrim will prevent the last cell to be imploded by ';'            

$stringData .= "\r\n";
}   

我想要的是:

(数据用分号隔开,行用newLine隔开)

我得到的是: (数据用分号隔开,但不添加新行,所有数据都显示在一行中)

请告诉我我做错了什么..

【问题讨论】:

  • 使用&lt;br&gt; 而不是\r\n。此外,您可以使用$i++ 代替$i = $i+1
  • 使用fputcsv() 而不是这个损坏的自制软件;并使用正确的标题,因此输出被视为 csv 而不是 html 标记

标签: php excel delimiter


【解决方案1】:

你的问题在于你的逻辑。您在每次迭代中不断将数据添加到 $dataArray,而代码中的以下语句会将 stingData 设置为 $dataArray 仅在最后一个循环迭代中的内爆值。那时,$dataArray 包含所有数据值,因为您不断向它推送 3 次迭代。

$stringData = rtrim(...)

你想做的是这样的:

<?php

//concatenation string
$stringData = '';

for ($i = 0; $i < 3; $i = $i+1)
{ 
    //init the array with every iteration. 
    $dataArray = array();

    //push your values
    array_push($dataArray,"$dataCell1","$dataCell2","$dataCell3","$dataCell4","$dataCell5","$dataCell6","$dataCell7","$dataCell8","$dataCell9","$dataCell10","$dataCell11");

    //concatenate
    $stringData  .= rtrim(implode(';', $dataArray), ';'); 

    //new line
    $stringData .= "\r\n";
} 

//print
echo $stringData . "\n";
?>

【讨论】:

  • 该死的我怎么能在这里跳过这样一个质量步骤:) 谢谢伙计!
【解决方案2】:

对于创建 csv 文件,fputcsv 确实是最好的方法。

首先将数据保存在“数组数组”中。这使得处理数据更容易:

$dataArray = array();

for ($i = 0; $i < 3; $i = $i+1)
    $dataArray[$i] = array($dataCell1,$dataCell2,$dataCell3,$dataCell4,$dataCell5,$dataCell6,$dataCell7,$dataCell8,$dataCell9,$dataCell10,$dataCell11);

接下来我们需要创建一个临时文件的句柄,同时还要确保我们有权这样做。然后,我们将使用正确的分隔符将所有数组条目存储在临时文件中。

$handle = fopen('php://temp', 'r+');

foreach($dataArray as $line)
    fputcsv($handle, $line, ';', '"');

rewind($handle);

如果你只是想将结果打印到一个页面,下面的代码就可以了:

$contents = "";

while(!feof($handle))
    $contents .= fread($handle, 8192);

fclose($handle);

echo $contents;

请注意,在纯 html 中,不显示换行符。但是,如果您检查结果页面的源代码,则可以看到换行符。

但如果您还想将值保存在可下载的 csv 文件中,则需要以下代码:

$fileName = "file.csv";
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $fileName . '";');
fpassthru($handle);
fclose($handle);

【讨论】:

    【解决方案3】:

    改用fputcsv

    // indexed array of data
    $data = [
        ['col1' => 1, 'col2' => 2, 'col3' => 3],
        ['col1' => 6, 'col2' => 7, 'col3' => 9],
        ['col1' => 5, 'col2' => 8, 'col3' => 15],
    ]
    
    // add headers for each column in the CSV download
    array_unshift($data, array_keys(reset($data)));
    
    $handle = fopen('php://output', 'w');
    foreach ($data as $row) {
        fputcsv($handle, $row, ';', '"');
    }
    fclose($handle);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2018-05-20
      • 1970-01-01
      • 2013-09-11
      • 2016-05-25
      • 2016-02-06
      • 1970-01-01
      相关资源
      最近更新 更多