在foreach()结束时更改其值的变量

时间:2012-05-29 15:51:27

标签: php

我正在尝试将一些信息从数据库传输到HTML以便为我的用户显示。我想在每次“行业”变化时打印新标签。我正在尝试使用一个名为$ last_industry的变量来跟踪我正在迭代的行业是否等于最后一行,但我没有取得好成绩。我在下面粘贴了我的代码。 $ c ['user_industries_title']是我需要监控的。

$last_industry = 'foo';

foreach($case_studies as &$c) {
  //If the last industry we iterated over is different than the one we're currently iterating over, close the last section and print a new section.
  if($last_industry != $c['user_industries_title']){
    echo "</section>"  
    echo "<section>";
    $changed = 1;
  }else {$changed = 0}

  $c = $last_industry;
  $last_industry = $c['user_industries_title'];
}

此问题与$ last_industry变量有关。为了实现这一点,它需要将自己更新为最近的$ c ['user_industries_title'],以便在下一次迭代开始时使用,这是不会发生的。我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

当值发生变化时,您需要更改if()内的$ last_industry值,否则您始终使用相同的行业值运行:

$last_industry = null;

foreach ($case_studies as $c) {
   if ($last_industry != $c['user_industries_title']) {
      echo '</section><section>';
      $last_industry = $c['user_industries_title'];
      $changed = 1;
   } else {
      $changed = 0;
   }
}

另外,请注意制作$ ca引用(&运算符)时的缺陷 - 它仍然是脚本持续时间的参考,并且如果依赖它保持其值后可能会导致奇怪的副作用循环退出。

答案 1 :(得分:1)

看一下最后两行,你覆盖$c,这是一个$last_industry数组,这是你在上一次迭代中使用的字符串。 重命名最后一行的$c或完全删除它。

BTW:如果你将PHP error_reporting设置设置为E_ALL,你会收到通知,$c不再是一个数组了!