【问题标题】:Best Method: Parsing CSV file and Passing back to front end using AJAX最佳方法:解析 CSV 文件并使用 AJAX 传回前端
【发布时间】:2009-10-07 21:43:41
【问题描述】:

我有一个 CSV 文件上传到我的服务器,PHP 脚本将在其中解析并通过 AJAX 将输出返回到 JavaScript。

CSV 文件由两行组成。第一行包含列名,第二行包含数据。我正在尝试编写一个脚本,将其解析为 Javascript 可以使用的表单,以生成填充此数据的文本字段和标签。我目前的方法是这样的:

if ( $_FILES['parameter_file']['tmp_name'] ) {

    $paramfile = fopen($_FILES['parameter_file']['tmp_name'], 'r');
    $header = fgets($paramfile);
    $temp = explode(',', str_replace('"', '', rtrim(ltrim($header))));

    $userdata = fgets($paramfile);
    $temp2 = explode(',', str_replace('"', '', rtrim(ltrim($userdata))));

    for ($k = 0; $k <= sizeof($temp) - 1; $k++) {
        $userparam[strtolower($temp[$k])] = $temp2[$k];
    }

    fclose($paramfile);
}

我可以看到大量的总体改进空间,请随时指出它们。但主要问题是 json_encode 是我所需要的。有什么更高效的吗?更好的主意?

谢谢大家

【问题讨论】:

    标签: php javascript ajax json


    【解决方案1】:

    正如Lukáš Lalinský 在他对csl's answer 的评论中所写,fgetcsv() 是你的朋友(顺便说一句,str_getcsv() 在 PHP 5.3 之前不可用)。

    代码应该很简单(错误处理留给 OP):

    $headers   = null;
    $rowNum    = 0;
    $tableData = array();
    $handle    = fopen($_FILES['parameter_file']['tmp_name'], 'r');
    while (($data = fgetcsv($handle)) !== false) {
        if ($rowNum == 0) {
            // parsing the CSV header
            $headers = array();
            foreach ($data as $d) {
                $headers[] = $d;
            }
        } else {
            // parsing the data rows
            $rowData = array();
            foreach ($data as $d) {
                $rowData[] = $d;
            }
            $tableData[] = array_combine($headers, $rowData)
        }
        $rowNum++;
    }
    fclose($handle);
    

    给定一个 CSV 文件:

    id,name,value
    1,first,value1
    2,second,value2
    3,third,value3
    

    这会给你一个headers-array

    array(
        0 => 'id',
        1 => 'name',
        2 => 'value'
    )
    

    和一个$tableData-array

    array(
        0 => array(
            'id'    => '1',
            'name'  => 'first',
            'value' => 'value1'
        ),
        1 => array(
            'id'    => '2',
            'name'  => 'second',
            'value' => 'value2'
        ),
        2 => array(
            'id'    => '3',
            'name'  => 'third',
            'value' => 'value3'
        )
    )
    

    根据需要调整代码...

    【讨论】:

      【解决方案2】:

      我宁愿使用str_getcsv() / fgetcsv() 然后json_encode()。在这两者之间,您始终可以对数据进行混洗,以使输出的 JSON 看起来像您想要的那样。

      一般来说,如果库函数可用,最好使用它们。

      【讨论】:

      • 由于他是在解析物理文件,fgetcsv 可能是更好的选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多