php递归函数foreach结果意外

时间:2018-03-04 14:02:24

标签: php

这是foreach循环中的一个简单的递归示例,可以理解结果为什么我得到这个结果?
答案将不胜感激。

function sub($i = 1){
   $level = array(1,2);
   if($i <= 2){
      foreach ($level as $count){
          echo "count => {$count} and i => {$i}<br/>";
          sub(++$i);
      }
   }
}

sub();

我收到了这个结果

count => 1 and i => 1
count => 1 and i => 2
count => 2 and i => 3
count => 2 and i => 2

我期待这个结果

count => 1 and i => 1
count => 1 and i => 2

3 个答案:

答案 0 :(得分:0)

这将是一个无限循环,直到它被突然杀死

供参考
http://php.net/manual/en/control-structures.foreach.php

说明:

     
  1. 功能子不会根据条件终止。  
  2. 变量$ i递增但包括停止时的语句。

答案 1 :(得分:0)

$i的值已更改

执行sub(++$i)时,实际上将$i的值更改为1。因此,当您的函数返回并且foreach循环转到数组的第二个值时,$i的值已更改,从而产生意外结果。

尝试改为sub($i + 1)。输出现在是正确的,但仍然与预期的输出不同。

答案 2 :(得分:0)

您正在测试循环外的$i <= 2。所以当你进入循环时,测试永远不会发生。还有其他问题,但这可能是由于你为解决这个问题所做的事情。