我在类中使用递归函数。该函数更改变量$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
。我更新了代码。
答案 0 :(得分:0)
好的,我不知道发生了什么,我拿出了array_unique函数,现在一切都很好。
显然使用array_unique时出现问题,因为在代码的某些部分我在数组中获取了一个数组。以某种方式窃听了一切。
谢谢大家的帮助o /