最佳方法:解析CSV文件并使用AJAX传回前端

时间:2009-10-07 21:43:41

标签: php javascript ajax json

我有一个上传到我的服务器的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。什么更有效率?一个更好的主意?

全部谢谢

2 个答案:

答案 0 :(得分:4)

正如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(
    0 => 'id',
    1 => 'name',
    2 => 'value'
)

$tableData - 数组

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'
    )
)

根据需要调整代码......

答案 1 :(得分:2)

我宁愿使用str_getcsv() / fgetcsv(),然后使用json_encode()。在这两者之间,您可以随时随地移动数据,以便根据需要显示输出的JSON。

一般情况下,如果库函数可用,最好使用库函数。