【问题标题】:PHP foreach within foreach repeat data and not escaping loopsforeach 中的 PHP foreach 重复数据而不是转义循环
【发布时间】:2013-12-04 12:52:55
【问题描述】:

将以下内容视为代码,

<?php
foreach ( $alldata as $alldatakey=>$alldatavalue){
 foreach ( $alldatavalue as $neededdatakey=>$neededdatavalue){

  #conditions here

  foreach (){

  if(){
    $variable = $data1;
  }

  if(){
    $variable .= $data2;
  }

  if(){
    $variable .= $data3;
  }

  }


 }
  echo $variable;
}
?>

输出:

Sewer Connected, 
Sewer Connected, Septic, 
Sewer Connected, Septic, Septic, 

Sewer Connected, 
Sewer Connected, Septic, 
Sewer Connected, Septic, Septic, 

Sewer Connected, 
Sewer Connected, Septic, 
Sewer Connected, Septic, Septic, 

Sewer Connected, 
Sewer Connected, Septic, 
Sewer Connected, Septic, Septic, 

data1、data2、data3的条件是正确的。 为什么重复打印数据?

【问题讨论】:

  • unclosed foreach } 并把 unset($varibale);回声后
  • 戴夫 - 我用过它,它几乎工作得很好,但我遇到了一个问题,比如它清除数据,因为它处于循环中,如果为空,我将 $variable; 分配为“NIL”它还清除了 NIL——没有任何数据我无法插入数据库。
  • 未设置的变量将完全清除变量。看到你的 .= 正在连接所有东西,这就是为什么你在循环的每次迭代中都会得到重复
  • 我有必要连接数据,因为它都是一个子类别,是一个类别的结果。知道为什么它会返回数组键或数组键有空数据,因为我们在插入 db 后正在清除数据。因此,当 foreach 再次执行时,它应该包含更新的数据,但它正在清除数组中的一些值。如何避免这个问题?
  • 戴夫将其发布为答案!我想接受!至少发布unset 的想法作为答案。

标签: php foreach logic controls conditional-statements


【解决方案1】:

将您的echo声明移至此处

        }
        //echo $varibale;

    }
    echo $varibale;//Move here <-----

}
?>

【讨论】:

  • 正如你上面所说的那样。
  • 尝试将其移出for 循环。我的意思是在最后一个大括号之后。
【解决方案2】:

未关闭foreach }

在 echo 后面加上 unset($varibale);,这样你的代码看起来像这样

<?php
foreach ( $alldata as $alldatakey=>$alldatavalue) {
 foreach ( $alldatavalue as $neededdatakey=>$neededdatavalue) {
  foreach () {
    //internal loop
      if() {
           $variable = $data1;
      }
      if() {
           $variable .= $data2;
      }
      if() {
           $variable .= $data3;
      }

  }
 }
  echo $variable;
  unset($variable);  // we unset it here so that we only each out the subcat blocks for that key cat not concat all subs and primaries
}
?>

【讨论】:

  • 谢谢它的出现,想考虑接受任何答案!
【解决方案3】:

你需要在你的所有循环中写出极端

    <?php
    foreach ( $alldata as $alldatakey=>$alldatavalue){
     foreach ( $alldatavalue as $neededdatakey=>$neededdatavalue){

      #conditions here

      foreach (){

      if(){
        $varibale = $data1;
      }

      if(){
        $varibale .= $data2;
      }

      if(){
        $varibale .= $data3;
        break;
      }
      }
    if(!empty($data3)){
    break;
   }

     }
      echo $varibale;
    }
    ?>

【讨论】:

  • 为什么要复制答案?这已经在下面 Shankar 的回答中提出。
  • 我不能,因为我正在插入数据,我想要一个一个插入,所以希望它位于第一个循环结束的上方。
  • Amal - Neeraj 的回答比 Shankar 的要早 3 分钟。没有争吵或抱怨。乐于分享知识。谢谢大家!
  • @NeerajKumar:真的吗?你可能想看看timeline for this question。 Shankar 在 28 分钟前发布了他的答案,而 Neeraj 在 15 分钟前发布了——这意味着两次发布之间的时间相差约 13 分钟。
  • @NeerajKumar,顺便说一句,这不是一场战斗。 Amal 刚刚提出了一个观点。
猜你喜欢
  • 1970-01-01
  • 2021-08-02
  • 2018-12-11
  • 1970-01-01
  • 2016-09-26
  • 2012-07-19
  • 2020-06-26
  • 2015-09-21
  • 2023-03-17
相关资源
最近更新 更多