【问题标题】:how to prevent duplicate outputs when looping through two arrays循环遍历两个数组时如何防止重复输出
【发布时间】:2016-11-17 18:04:56
【问题描述】:

我正在尝试一次遍历两个数组。第一个数组包含标题,第二个数组包含用户通过表单输入的数据。然后将这些值设置为 pdf 文件。我遇到的问题是输出被复制了两次。

电流输出

first name user input
first name user input
last name user input
last name user input

我想要的输出

first name john
last name  smith

变量转储

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();
}
?>

【问题讨论】:

  • 请在问题中添加更多信息(有一个edit 链接,使用它!):你得到什么输出,有什么问题?
  • 我已经编辑了我的问题
  • 一些合理的代码缩进是个好主意。它可以帮助我们阅读代码,更重要的是,它将帮助 您调试代码 Take a quick look at a coding standard 为您自己谋福利。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
  • 好的,谢谢,该编辑改进了问题。很明显,您确实想在彼此内部使用两个循环,这显然必须加倍。仍然不清楚内部循环的目的是什么,这就是为什么我们不能真正给出简单的答案。
  • 内循环正在循环用户输入的数据

标签: php arrays


【解决方案1】:

首先,这是出乎意料的行为,因为第二个循环应该以名字、姓氏、名字、姓氏的形式重复。 (see what I mean here)。

$heading = ['first name', 'last name'];

上面的 sn-p 代码显示您的数组中有 2 个条目。因此,您的内部 foreach() 循环将重复两次,因为它被包裹在其中。更好的理解:

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);
    [...]
}

希望这对您的重复问题有所帮助。
tldr: See it working here.

【讨论】:

    【解决方案2】:

    你可以这样做:

    $duplicate = array();
    foreach ($... as $...):
        if (in_array($...., $duplicate))
        continue; //if we already have that id, skip it
        $duplicate[] = $...;
    endforeach
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2020-01-14
      • 2015-11-10
      • 1970-01-01
      • 2013-03-07
      • 2012-02-28
      • 2012-09-29
      相关资源
      最近更新 更多