如何上传 CSV 文件并回显 json_encode($csv)?

3

html

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="csv" value="" />
<input type="submit" name="submit" value="Save" /></form>
</form>

我需要帮助读取上传的csv文件中的值,并且使用 echo json_encode($csv) 将其输出为json格式。我尝试过获取这些值,但是一直都是null。

<?php
$csv = array();

// check there are no errors
if($_FILES['csv']['error'] == 0){
    $name = $_FILES['csv']['name'];
    $ext = strtolower(end(explode('.', $_FILES['csv']['name'])));
    $type = $_FILES['csv']['type'];
    $tmpName = $_FILES['csv']['tmp_name'];

    // check the file is a csv
    if($ext === 'csv'){
        if(($handle = fopen($tmpName, 'r')) !== FALSE) {
            // necessary if a large csv file
            set_time_limit(0);


            while(($data = fgetcsv($handle, 10000, ',')) !== FALSE) {
                // number of fields in the csv
                $col_count = count($data);

                // get the values from the csv


            }
array_walk($csv, function(&$a) use ($csv) {
    $a = array_combine($csv[0], $a);
});
array_shift($csv); # remove column header
header('Content-Type: application/json');
echo json_encode($csv); //display array
            fclose($handle);
        }
    }
}

?>

示例CSV

LastName,FirstName,MAT251-Calc-I ,MAT252-Calc-II,MAT320-DiscreteMath,CPS210-CompSci-I,CPS310-CompSci-II,CPS315-CompSci-III,CPS352-OOP,CPS330-Assembly.Arch.,CPS353-SoftEng,CPS415-Disc.Cont.Algorithms,CPS340-Op.Sys,CPS425-Lang.Processing,CPS493-Elect-1,CPS493-Projects,EGC230-Dig.Logic,EGC208-Dig.Logic.Lab,SCIENCE-I,SCIENCE-II
Rocha, Cara I.,A,A,A,C-,,,,,,,,,,,,,,
Hamilton, Mufutau N.,B,B,B,A-,,,,,,,,,,,,,,
Castro, Chiquita A.,B,B,C ,C ,,,,,,,,,,,,,,
Juarez, Edward Y.,C+,B,B,C,A,C+,B,B,C,A,C+,B,B,C,A,C+,A,B
Erickson, Norman H.,C-,B-,C+,B,B,B,,C-,B,,,,,,,B,,
Downs, Moana C.,A,C+,B,C-,A,C-,,A-,B+,,,,,,,,,
1个回答

2
你不需要那么多的代码,可以尝试使用以下代码替代:
按照文件上传处理的指示保存上传的文件,然后:
$file="sample.csv";
$csv= file_get_contents($file);
$array = array_map("str_getcsv", explode("\n", $csv));
$json = json_encode($array);
header('Content-Type: application/json');
print_r($json);

功能:

file_get_contents()

此函数类似于 file(),但 file_get_contents() 返回一个字符串,从指定的偏移量开始到 maxlen 字节。如果失败,file_get_contents() 将返回 FALSE。

array_map()

将回调函数作用到数组 array1 的每个元素上,并返回包含所有元素的数组。回调函数接受的参数数量应与传递给 array_map() 的数组数量相匹配。

str_getcsv()

解析 CSV 格式的字符串输入并返回包含读取字段的数组。

json_encode()

返回一个包含值 JSON 表示的字符串。


通过在脚本顶部添加“error_reporting(E_ALL); ini_set('display_errors', '1');”来启用 PHP 代码的错误报告,它会返回什么? - Pedro Lobito
我想要做的是上传一个CSV文件。它可以是任何具有与示例CSV相同结构的CSV文件。 - user5537898

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接