PHP - 使用与上次调用相同的变量的递归函数

时间:2016-04-14 22:06:28

标签: php arrays recursion

我在类中使用递归函数。该函数更改变量$estados的值。在第一次调用中,一切正常,在第二次调用中,函数会更改函数最后一次调用的变量值。

这是我的代码。

class Trab3Code
{
    public function fechoEpsilon($automato, $estado)
    {
        $estados = $automato->transicao($estado, '&');
        $fechos = array();
        if (!empty($estados)) {
            foreach ($estados as $elemento) {
                $fechos[] = $this->fechoEpsilon($automato, $elemento);
            }
        }

        $estados[] = $estado;

        return array_unique(array_merge($estados, $fechos));
    }
}

我从$estado变量的函数中获取$automato变量的新值。函数的返回是一个数组。在第一次运行中,一切都很好。在第二次运行中,函数的返回将是一个空数组,并且会覆盖第一次运行的先前值。

任何人都可以帮助我吗?

--- --- EDIT

我的函数的第一次调用是fechoEpsilon($automato, 0)。 话虽如此,$estados的值至少应包含:

array(
    0 => 1
    1 => 3
)

这是第一次通话的结果 但我得到的是一个空数组。或者只有0值的数组,在此行中设置

$estados[] = $estado;

对不起,如果它看起来很复杂,这是一个关于automatas的工作。 fechoEpsilon函数计算自动机内部状态的Epsilon Closure。

而且我知道价值在变化,不知道如何,但确实如此。如果我在调用中转储变量的值,它将会改变,最后,我的最终值是最后一次调用的值,这是一个空数组。 抱歉静态方法调用,是我的错误,我使用的是$this。我更新了代码。

1 个答案:

答案 0 :(得分:0)

好的,我不知道发生了什么,我拿出了array_unique函数,现在一切都很好。

显然使用array_unique时出现问题,因为在代码的某些部分我在数组中获取了一个数组。以某种方式窃听了一切。

谢谢大家的帮助o /