繁体   English   中英

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

[英]How to simply save a CSV file into a multidimensional array in PHP?

简而言之,我有一个脚本,可以让我从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个元素。 从不多或从不少。

我在网上搜索了很多东西,但似乎找不到合适的答案。

非常感谢所有帮助。

您将需要array_unshift

array_unshift(0, $line);

因此您的记录统计信息的索引为1,索引0为0。 还初始化了$csv_array ,如下所示

$csv_array = array(array());

您当前试图做的不是解决此问题的好方法,我建议您更改其余代码以使用适当的数组索引。 但是,您可以执行以下操作,而不仅仅是将$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
        )

)

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM