如何在循环两个数组时防止重复输出

时间:2016-11-17 18:04:57

标签: php arrays

我试图一次遍历两个数组。第一个数组包含标题,第二个数组包含用户通过表单估算的数据。然后将这些值设置为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();
}
?>

2 个答案:

答案 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

希望这有帮助。