我试图一次遍历两个数组。第一个数组包含标题,第二个数组包含用户通过表单估算的数据。然后将这些值设置为pdf文件。我遇到的问题是输出被重复两次。
当前输出
first name user input
first name user input
last name user input
last name user input
我想要的输出
first name john
last name smith
var dump
array(3) { ["fname"]=> string(5) "dkdkd" ["lname"]=> string(3) "kdk" ["submit"]=> string(6) "Submit" } array(3) { ["fname"]=> string(5) "dkdkd" ["lname"]=> string(3) "kdk" ["submit"]=> string(6) "Submit" } array(3) { ["fname"]=> string(5) "dkdkd" ["lname"]=> string(3) "kdk" ["submit"]=> string(6) "Submit" } array(3) { ["fname"]=> string(5) "dkdkd" ["lname"]=> string(3) "kdk" ["submit"]=> string(6) "Submit" }
代码
<?php require('fpdf.php');?>
<?php
$headings = [
"first_name" => "first Name",
"last_name" => "last Name",
];
if(isset($_POST['submit'])) {
$pdf = new FPDF();
$pdf->AddPage();
foreach ($headings as &$value) {
foreach ($_POST as $key => $data) {
if($key == 'submit') {
continue;
}
$pdf->SetFont('Arial','B',16);
$pdf->write(40,"$value");
$pdf->write(40,"$data");
$pdf->ln(10);
}
}
$pdf->Output();
}
?>
答案 0 :(得分:0)
首先,这是意外的行为,因为第二个循环应该重复作为名字,姓氏,名字,姓氏。 (see what I mean here)。
foreach()
上面的代码片段显示您的数组中有2个条目。因此,您的内部foreach(... as ...) // 2 entries
foreach(... as ...) // 3 entries that will be repeated twice ^
循环将重复两次,因为它被包裹在其中。更好的理解:
$i = 0; // index start at 0
foreach($_POST as $k => $v) {
if($k == "submit") continue;
$pdf->write(40, $heading[$i++]);
$pdf->write(40, $v);
[...]
}
您可以使用带有计数器的数组索引来实现此目的。
{{1}}
希望这有助于解决您的重复问题。
tldr: See it working here。
答案 1 :(得分:0)
您可以这样做:
$duplicate = array();
foreach ($... as $...):
if (in_array($...., $duplicate))
continue; //if we already have that id, skip it
$duplicate[] = $...;
endforeach
希望这有帮助。