[英]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.