填充多维数组,dinamically,并打印到csv

时间:2016-11-30 16:00:10

标签: php arrays

我有一个正在运行的php页面,但我对用户可以添加的行设置了限制,因为编写每行的代码是疯狂的。 我阅读,测试过,但无法想到如何在我的代码中使用数组。

用户必须可以随意在表中添加任意数量的行,并将所有行打印在csv文件中。

请参阅此JSFIDDLE,因为它会更好地澄清所有内容。

我的问题是,我如何"转换"以下代码,在数组就绪代码中? php部分在下面,"你得到了重点"意味着,对于每一行,我必须复制并粘贴该块N次。 content .=的内容相同:     

  $name = addslashes(strip_tags($_POST["name"]));
  $surname = addslashes(strip_tags($_POST["surname"]));
  $email = addslashes(strip_tags($_POST["email"]));
  $telephone = addslashes(strip_tags($_POST["telephone"]));


  $books0 = addslashes(strip_tags(@$_POST['books0'])) ?: '';
  $tv-series0 = addslashes(strip_tags(@$_POST['tv-series0'])) ?: '';
  $movies0 = addslashes(strip_tags(@$_POST['movies0'])) ?: '';
  $hobbies0 = addslashes(strip_tags(@$_POST['hobbies0'])) ?: '';
  $skills0 = addslashes(strip_tags(@$_POST['skills0'])) ?: '';

  $books1 = addslashes(strip_tags(@$_POST['books1'])) ?: '';
  $tv-series1 = addslashes(strip_tags(@$_POST['tv-series1'])) ?: '';
  $movies1 = addslashes(strip_tags(@$_POST['movies1'])) ?: '';
  $hobbies1 = addslashes(strip_tags(@$_POST['hobbies1'])) ?: '';
  $skills1 = addslashes(strip_tags(@$_POST['skills1'])) ?: '';

/*  [ You got the point ...] */


  $content = "Name;$name\n";
  $content .= "Surname;$surname\n";
  $content .= "Email;$email\n";
  $content .= "Telephone;$telephone\n\n";

  //set the data of the CSV
  $content .= "Books;Tv-series;Movies;Hobbies;Skills\n";
  $content .= "$books0;$tv-series0;$movies0;$hobbies0;$skills0\n";
  $content .= "$books1;$tv-series1;$movies1;$hobbies1;$skills1\n";
  $content .= "$books2;$tv-series2;$movies2;$hobbies2;$skills2\n";
  $content .= "$books3;$tv-series3;$movies3;$hobbies3;$skills3\n";
  $content .= "$books4;$tv-series4;$movies4;$hobbies4;$skills4\n";
  $content .= "$books5;$tv-series5;$movies5;$hobbies5;$skills5\n";

  # Create the file and redirect to index page
  $date = date("Ymd");
  $target_dir = "C:/$name_".$date.".csv";
  file_put_contents($target_dir, $content);
  header("Location:index.php");
  exit();
}

?>

更新:我被要求澄清我的问题。 此代码从表单中获取值并将其写入csv。 如果我添加(来自jsfiddle)许多行怎么办?我应该为每一行分配许多值。 我希望使用数组获得更好的结果,并且可能使用更少的代码。

使用数组,我不需要限制用户可以添加的行。相反,我被迫知道。

再说一次,如果有人能够编写一个与我的情况相符的数组,这对我有很大的帮助。 如果我不了解阵列或一般开发

,我很抱歉

1 个答案:

答案 0 :(得分:1)

使用以下名称创建表单字段:

<input name="prefs[0][book]">
<input name="prefs[0][tv]">
<input name="prefs[0][movie]">
...

<input name="prefs[1][book]">
<input name="prefs[1][tv]">
<input name="prefs[1][movie]">
...

这将为您提供所需的数组格式,而无需任何额外的工作。然后将其转储为CSV:

$csv = fopen("C:/{$name}_{$date}.csv", 'w');

foreach ($_POST['prefs'] as $pref) {
    fputcsv($csv, $pref);
}

这就是你需要做的全部事情。不要剥离标签或添加斜杠,fputcsv将负责正确的转义。当然你可能想要做一些数据验证等等,但我会把它留给你。