我需要知道一个递归函数在函数中被调用了多少次。这是我的函数:
function structure($x) {
$qry = mysql_query("SELECT `parent_id` FROM `categories` WHERE `categories_id`=$x");
$result = mysql_fetch_assoc($qry);
$cat = $result['parent_id'];
if($cat !=0) {
structure($cat);
}
echo $cat.' >';
}我尝试添加一个计数器,例如$i=0,然后添加$i++,但每次调用函数时,它当然会恢复到$i=0。我已经尝试添加数组并对数组进行计数,但当然,每次调用该函数时,它都必须设置一个新的数组$i=array()。
我认为唯一可行的方法是,如果我在函数外部设置数组或计数器,但我不知道是否可以在函数外部调用变量。
关于如何在函数外调用变量,或者更好地计算函数被调用的次数,你有什么想法吗?
发布于 2013-06-13 16:36:47
选项1:通过引用传递变量
function structure($cat, &$counter) {
$counter++;
...
}
structure('foo', $counter);
echo $counter;选项2:使用static变量
function structure($cat) {
static $counter = 0;
echo ++$counter;
...
}选项3:使用global变量(不,不!)
$counter = 0;
function structure($cat) {
global $counter;
$counter++;
...
}选项4:使用闭包
$counter = 0;
$structure = function ($cat) use (&$counter) {
$counter++;
...
}
$structure('foo');
echo $counter;发布于 2013-06-13 16:34:14
您可以向递归函数添加另一个参数,该参数将用作计数器:
function structure($x, $cnt) {
$qry = mysql_query("SELECT `parent_id` FROM `categories` WHERE `categories_id`=$x");
$result = mysql_fetch_assoc($qry);
$cat = $result['parent_id'];
if($cat !=0) {
structure($cat, $cnt++);
}
echo $cat.' >';
}或者,您可以使用全局变量。
发布于 2013-06-13 16:36:30
当我遇到这个问题时,我通常的解决方案是添加一个计数器变量作为额外的参数,例如
function structure($x, $i=0) {
...
structure($nextX, ++$i);
...
}这样做的好处是,对structure的原始调用不需要您指定计数器,并且仍然可以像structure($x);一样调用计数器
https://stackoverflow.com/questions/17082608
复制相似问题