【问题标题】:Nested foreach loop, break inside loop嵌套foreach循环,打破循环
【发布时间】:2013-01-15 15:46:54
【问题描述】:

我尝试使用嵌套的 foreach 循环创建一个列表。第一个循环是循环一些数字,第二个循环是循环日期。我想写一个数字到一个日期。所以还有另一个功能可以检查。但结果是数字多次写入日期。

Out 是这样的:

number 5 is on 2013.01.15;
number 5 is on 2013.01.16;
number 5 is on 2013.01.17;
number 6 is on 2013.01.15;
number 6 is on 2013.01.17;

代码:

function create_event($numbers,$available_dates) {
  foreach($numbers as $number) {
    foreach($avaliable_dates as $av_date) {

      $date_check= dateCheck($av_date,$number);

      if ($date_check == 0) {
        echo "number ".$number." is on ".$av_date;
        break;
      } else {
        $send_again[] = $number;
      }

    }
  }
  create_event($send_again,$avaliable_dates);
}

我认为内部循环不会中断。

【问题讨论】:

  • 亲爱的 Yasin,请澄清您的问题,并在发布前尝试逐行调试您的应用程序。干杯,
  • @Bondye 我尝试使用continue;,但没有任何改变。
  • @DídacPérez 你可能是对的,但我花了 3 或 4 个小时来完成它,但我没有实现。所以我只是问。
  • 请说明您的问题。
  • 请记住,您只是打破了内部循环,即可用日期循环。如果你想跳出外循环,你需要跳出内循环。

标签: php foreach nested-loops


【解决方案1】:

你的break; 应该打破内部foreach 循环!
我看到这种行为的唯一原因是在你的数组中重复数字!(例如$numers=array(5,5,5,6,6);
尝试在外部 foreach 循环之前插入:$numbers=array_unique($numbers);
如果你需要打破两个循环(内部和外部)写break 2; 而不是break;

【讨论】:

    【解决方案2】:

    你能检查一下这样的事情吗:

    function create_event($numbers,$available_dates) {
        foreach ($numbers as $number) {
            foreach ($available_dates as &$av_date) {
                if (dateCheck($av_date, $number) == 0) {
                    unset($av_date);
                    break;
                }
            }
        }
    }
    

    【讨论】:

    • 我先这样尝试过。但是这里有一个问题,这种类型的循环不是检查所有日期。因为数字计数不等于日期计数。
    • 好的。那么我需要更多解释你的问题。您是希望为每个数字找到正确的日期(仅一个)还是希望为每个日期找到一个数字?
    • 我想将每个号码分配给第一个可用日期。那么这个日期下次不使用,号码循环必须继续到下一个号码。
    • 是的,这个帮助我更改代码并找到解决方案。非常感谢。我也取消了$av_date$number。然后将新数组发送到自己的数组中。因此,先前数组的值提取了新数组的值。然后开始新的循环。我知道这有点复杂,我的表达也不是很好。感谢大家的回复。
    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 2013-03-09
    • 2013-07-09
    • 2012-03-30
    • 2010-10-13
    相关资源
    最近更新 更多