0

简单地说,我有一个脚本,允许我从 HTML 表单上传 CSV 文件并将其保存为 PHP 中的数组。该脚本运行良好,尽管我需要将 CSV 文件保存为多维数组。

这是我的 CSV 文件的外观:

question1,answer1,answer2,answer3,answer4
question2,answer1,answer2,answer3,answer4
question3,answer1,answer2,answer3,answer4

这是为了将元素保存为:

uploaded[1][1],uploaded[1][2],uploaded[1][3],uploaded[1][4],uploaded[1][5]
uploaded[2][1],uploaded[2][2],uploaded[2][3],uploaded[2][4],uploaded[2][5]
uploaded[3][1],uploaded[3][2],uploaded[3][3],uploaded[3][4],uploaded[3][5]

这是我的工作上传脚本

<?php

if(isset($_POST['savecsv']))
{
    $csv_array = Array();
    $file = fopen($_FILES['upload_file']['tmp_name'], 'r');
    if($file){
        while (($line = fgetcsv($file)) !== FALSE) {
          //$line is an array of the csv elements
          array_push($csv_array,$line);
        }
        fclose($file);
    }
}

?>


<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
 <input type="file" name="upload_file" />
 <input type="submit" name="savecsv"/>
</form>

我知道数组从 0 开始,虽然这个 CSV 是一个上传版本,用于向我的网站测验添加问题。我设置其余代码的方式只会从 [1][1] 向上处理。没有必要详细说明为什么,因为那是题外话,但这正是我要求的方式。因此,我认为所有 [0] 都应该留空。

此外,每行总是每行有 5 个元素。永远不会更多或永远不会更少。

我在网上进行了广泛的搜索,但似乎找不到合适的答案。

非常感谢所有帮助。

4

2 回答 2

0

您需要array_unshift

array_unshift(0, $line);

所以你的记录统计索引为 1,索引为 0 为 0。还初始化你$csv_array如下

$csv_array = array(array());
于 2013-08-22T06:10:56.973 回答
0

您当前尝试做的不是解决此问题的好方法,我建议您更改其余代码以使用正确的数组索引。但是,您可以执行以下操作,而不是简单地推$line送到:$csv_array

$csv_array[] = array_combine(range(1, count($line)), array_values($line));

完整代码:

if(isset($_POST['savecsv']))
{
  $file = fopen($_FILES['upload_file']['tmp_name'], 'r');
  if($file) {
    while (($line = fgetcsv($file)) !== FALSE) {
    $csv_array[] = array_combine(range(1, count($line)), array_values($line));
    }
    fclose($file);
  }
}

输出:

Array
(
    [0] => Array
        (
            [1] => question1
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

    [1] => Array
        (
            [1] => question2
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

    [2] => Array
        (
            [1] => question3
            [2] => answer1
            [3] => answer2
            [4] => answer3
            [5] => answer4
        )

)

希望这可以帮助!

于 2013-08-22T06:25:08.547 回答