Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取一个csv文件并使用php创建另一个csv文件_Php_Csv - Fatal编程技术网

读取一个csv文件并使用php创建另一个csv文件

读取一个csv文件并使用php创建另一个csv文件,php,csv,Php,Csv,我有一个.csv文件,当我通过记事本打开它时,它看起来像: ID501501503502 当我通过php在浏览器中打印它时,它看起来像 ID 501 501 503 502 我的代码是: $handle = fopen("MonC1.csv", "r"); $data = fgetcsv($handle, 0); $fh = fopen('php://output', 'w'); if (! empty($data)) { foreach ($data as $item) {

我有一个
.csv
文件,当我通过记事本打开它时,它看起来像:

ID501501503502
当我通过php在浏览器中打印它时,它看起来像

ID 501 501 503 502
我的代码是:

$handle = fopen("MonC1.csv", "r");
$data = fgetcsv($handle, 0);
$fh = fopen('php://output', 'w');
if (! empty($data)) {
  foreach ($data as $item) {
      echo $item."<br>";
     //fputcsv($fh, array($item));
  }
}
$handle=fopen(“MonC1.csv”、“r”);
$data=fgetcsv($handle,0);
$fh=fopen($fh)php://output","w",;
如果(!空($data)){
foreach($数据作为$项){
回显$item。“
”; //fputcsv($fh,数组($item)); } }
因此,for循环中的
br
标记基本上不起作用。这是我的第一个问题

第二个问题是,即使我使用
fputcsv(现在它已关闭)
它也不会创建实际的
csv
文件

现在我的问题是,为什么它在记事本中并没有空间,而当我在浏览器中打印时,它得到了空间

我只有一个专栏,没有别的


非常感谢您的帮助。提前感谢。

如我在评论中所述,您的原始文件似乎以UNIX行结尾保存,然后您在Windows中使用了
fgetcsv
,因此整个文件将作为一行读取。在整个输出的末尾可能有一个

因此,在处理文件之前,需要对其进行预处理以转换行尾

在Linux上,实用程序
unix2dos
执行您想要的操作。或者,您可以简单地将文件中的
\n
替换为
\r\n

另一个问题是
fgetcsv
无法将整个文件转换为数组。相反,它从文件句柄中读取一行,并将其转换为数组。您需要读取循环中的行:

while (($data = fgetcsv($handle)) !== FALSE) {
  // $data contains one line of the CSV, in array form
  // now you can fputcsv the single line
}

该脚本实际生成了什么HTML?实际上它正在打印csv文件的内容。因此,如果csv文件的源文件包含ID123,则echo正在打印ID 1 2 3。那是在哪里@EWit询问html响应的来源。尝试使用chr,但没有更改。在我看来,您的原始文件是以UNIX行结尾保存的,然后您在Windows中使用
fgetcsv
,因此整个文件将作为一行读取。在整个输出的末尾可能有一个

。太棒了。现在我正在将数据写入一个实际的csv文件。仍然不是100%完美,但因为它与这个问题无关,所以我可能会在花一些时间后发布另一个问题。再次感谢您的帮助。我认为它工作不正常。当($data=fgetcsv($handle))!==FALSE{echo$data[0]。“
”;}仍在浏览器中作为单行输出时,我执行了此操作。不确定我在做什么错误。您没有修复行尾。有两件事需要解决;您只添加了while循环。不确定如果数组包含一行,如何放置“\n”。是否需要用\r\n替换