使用类的递归函数填充数组

时间:2014-06-27 00:23:34

标签: php arrays function class recursion

我可能会遇到一个简单的问题。我在里面创建了一个包含许多计算的新类。我有一个递归数组,从Die结果动态生成SQL。当结果在给定范围之间时,我将不得不进行额外的操作。

我有这个多维数组来填充我的骰子的值,使用一组ID作为我的第一个“关键”:

$this->multidim[$id_object][]

我正在考虑创建另一个函数来填充它,但我不确定如何正确构建它。我需要的这个功能的规格如下:

  • 我需要使用多维数组调用函数,
  • 如果结果为100,我需要重新掷骰子两次,并再次检查结果
$this->checkresult($id_obj, $die);

function checkresult($id_obj, $die)
{
    if ($die == 100){

        $rand1 = $this->launchDie(1, 100);
        $rand2 = $this->launchDie(1, 100);

        if($this->checkresult($array, $rand1)) {
            if($this->checkresult($array, $rand2)) {
                return 1;
            }
        }
    } else {
        if (!isset($array[$tiro])) {
            $this->multidim[$id_obj][$die] = 1;
        }

        return 1;
    }
}

这种做法是否正确?我觉得不回复“真正的”值感到不舒服,但正如我所说,我需要递归地重新调用该函数。

1 个答案:

答案 0 :(得分:0)

您可以像这样返回滚动值:

public function addResult($object_id, $result)
{
        $this->multidim[$object_id][] = $result;
}

public function checkResult($object_id)
{
        $roll = $this->launchDie(1, 100);

        if ($roll == 100) {
                $additionalRoll = $this->checkResult($object_id);
                $this->addResult($object_id, $additionalRoll);

                $roll = $this->checkResult();
        }

        return $roll;
}

并称之为:

$this->addResult($object_id, $this->checkResult($object_id));

这种方式每次滚动100时,将有两个卷而不是一个卷。请注意,这可能会永远持续下去(不太可能,但是))。

另请注意,我更改了multidim数组的结构,因为这对我来说更有意义,如果它与您想要实现的不匹配,您可能需要更改它。