如何在PHP中将CSV文件简单地保存到多维数组中?

如何在PHP中将CSV文件简单地保存到多维数组中?,php,arrays,csv,Php,Arrays,Csv,简单地说,我有一个脚本,允许我从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],upload

简单地说,我有一个脚本,允许我从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]
这是关于元素应保存为什么的顺序:

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>


您需要
array\u unshift

array_unshift(0, $line);
因此,您的记录使用索引1进行统计,并且在索引0处使用0。还初始化了
$csv\u数组
,如下所示

$csv_array = array(array());

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

完整代码:

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
        )

)

希望这有帮助

@DevZer0-对不起,伙计,这还不能回答我的问题。我需要一个新的循环,使我的数组成为一个多维数组,就像我指定的格式一样。由于某种原因,我看到它投了反对票。不知道为什么。我投了更高的票,因为它非常有用,谢谢。我的问题离题了,但是如何让var_转储像那样输出呢?我的正在一行打印我的整个数组。@fizzix:在
标记中输出它们,如下所示:
echo'',print\r($csv\u array),''