我有一个功能,如:

myfunction($i,$condition = false, $level = 0) {
   do {
      if (... some conditions here)   { myfunction($i, true, ++$level) }
      else { do something here ... }
   while ( ...meet ending condition )
}

我不明白为什么当我递归调用 true 时 $condition 会转为 myfunction(),而在第一级迭代时又回到 false 并且 $level 在退出递归模式后不会转为 0
$condition = false, false, true, false, false, true, true, true ...$level = 0,0,1,1,1,2,2,2 ... it shoul also be like = 0,0,1,0,0,1,2,2,2,0 ...
?

谢谢

P.S:数组也一样?我在函数中声明了一个数组设置为空,当退出递归模式时,它不再为空:
myfunction($i,$condition = false, $level = 0, $array = null) {
       do {
    if($condition) { $array = null }    <--------- I HAVE TO ADD THIS LINE TO MAKE IT NULL WHY ?
          if (... some conditions here)   {$array = Array(someblabla); myfunction($i, true, ++$level, $array) }
          else { do something here ... }
       while ( ...meet ending condition )
    }

最佳答案

您缺少的是 ++$level$level+1 之间的区别。前者修改了 $level 的值,以便在 myfunction 的同一调用中进一步引用该变量时会看到递增的值。如果这不是您想要的,请改写 $level+1

关于php递归变量不会改变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9193960/

10-16 17:46