【问题标题】:How to write an array as csv file content using php?如何使用 php 将数组写入 csv 文件内容?
【发布时间】:2015-02-17 07:05:39
【问题描述】:

我正在将一个包含希伯来语的 CSV 文件导入我的网站。在记事本中打开 CSV 文件时,希伯来语的内容没有被引号括起来。不在引号中的内容不会在我的网站中阅读。 在上传这个 csv 文件的过程中,这个文件被移动到另一个文件中。为了用双引号将希伯来语内容括起来,我尝试了以下代码,但文件没有更新。

$fileHandler = fopen('IMPORT_193', 'rw');
        while (($buffer = fgets($fileHandler))) 
        {
        $v=explode(',',$buffer);

        for($i=0;$i<count($v);$i++)
        {

            $val=trim($v[$i],'"');
            $v1[]= '"'.$val.'"';

        }

        fputcsv($fileHandler, $v1);
        }

我想用带有引号的新值更新文件中的当前内容作为 CSV 。有什么方法可以将 CSV 内容用引号括起来?等待您的回复!

【问题讨论】:

    标签: php csv fopen fputcsv


    【解决方案1】:

    你不能(至少在这个例子中)同时读写同一个文件。 试试这个:

    $fileRead = fopen('IMPORT_193', 'r');
    $tempFile = tempnam(sys_get_temp_dir(), 'CSVIMPORT');
    $fileWrite = fopen($tempFile, 'w');
    while(!feof($fileRead)) {
      $data = fgetcsv($fileRead);
      foreach($data as $key=>$value) {
        if(!is_numeric($value)) {
          $data[$key] = '"'.$value.'"';
        }
      }
      fputcsv($fileWrite, $data);
    }
    fclose($fileRead);
    fclose($fileWrite);
    rename($tempFile, 'IMPORT_193');
    

    这应该可以解决问题。我没有测试过这个。并且您需要有权限覆盖 IMPORT_193 文件。

    【讨论】:

    • 使用'fgetcsv'读取带引号的值,所以我使用'fgets'。在您的代码中,我将 while 循环替换为我的问题中提到的 while 循环。文件被写入,但每次只读取第一行,使用“fgetcsv”时不读取剩余内容。@Thomas L
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2020-05-10
    • 2016-01-06
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多