我有一个功能,如:
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/