【问题标题】:Populating an Array with recursive function of a class使用类的递归函数填充数组
【发布时间】:2014-06-27 00:23:33
【问题描述】:

我遇到了一个简单的问题。我创建了一个新类,里面有很多计算。我有一个递归数组,可以从 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;
    }
}

这种方法正确吗?不返回“真实”值让我感到不舒服,但正如我所说,我需要递归地重新调用该函数。

【问题讨论】:

  • setSpecialCount() 的代码是什么?变量$array$tiro 来自哪里?
  • 对不起,我忘记更改我的参考。立即编辑。

标签: php arrays function class recursion


【解决方案1】:

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

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 数组的结构,因为这样对我来说更有意义,如果它与您想要实现的目标不匹配,您可能需要将其更改回来。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2016-07-13
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    相关资源
    最近更新 更多