循环内循环

时间:2013-02-04 14:55:30

标签: php math loops

我有这项艰巨的任务(至少对我而言)。 这是抽象的问题,数学我会说。 我们假设我有2个输入:

  1. 关键字(字符串)
  2. 一个数字(深度级别)
  3. 并提交按钮。

    此关键字返回数据库中与此字符串类似的其他8个关键字。 对于8个关键字中的每一个,我需要调用相同的函数,这将返回我已经返回的所有这8个字符串中的另外8个类似关键字。 这是“级别”号码。我需要深入到每个返回的字符串里面,具体取决于我输入的级别数。

    例如:如果级别编号为2,那么我们将调用该函数9次。第一次为原始关键字,每次返回关键字为8次。 如果级别编号为3,则该函数将被调用73次。与上一个示例中一样,但是我们已经返回了另外8个关键字。我认为循环内部会有几个循环,但我自己无法弄明白。非常感谢您的建议。

    这是我写的主要代码,可能效率不高:

    $keywords = preg_split('/$\R?^/m', trim($_POST['keyword']));
    $keywords = array_map('trim', $keywords);
    $level = $_POST['level'];
    if (!$level || $level < 2) {
        echo '<b>Level was either 1 or null</b>';
    }
    foreach ($keywords as $keyword) {
        $results = getResults($keyword);
        if ($level && $results) {
            for ($i = 0; $i < sizeof($results); $i++) {
                $results1 = getResults($results[$i]);
                for ($j = 0; $j < $level; $j++) {
                    $results1 = getResults($results1[$i])
                }
            }
        }
    }
    

    输出应该是这样的:

    1->
       2
       ->
          3
          3
          3
          3
          3
          3
          3
          3
       2->
       2->
       2->
       2->
    

2 个答案:

答案 0 :(得分:9)

您需要了解recursion means以及如何在代码中使用它。基本上你需要在自身内部调用相同的函数,n次,其中n是请求的深度级别。

从一些小例子开始,比如Fibonacci系列,你会发现实现你的功能的方法。

全部基于条件($deepness > 0)

这是基于我理解的一点建议(伪代码)。

function findSimilar($words,$deepness) {
    if($deepness == 0) {
        return similarWordsOf($words);
    } else {
        return similarWordsOf(findSimilar($words,$deepness -1));
    }
}

答案 1 :(得分:0)

正如其他人已经指出的那样,解决方案的关键是使用递归函数,即使用降低的深度值再次为每个相似单词调用自身的函数。

我的PHP有点生疏,所以这里有一些伪代码(又名Python):

def printSimilar(word, deepness=1, indent=0):
    print ("  " * indent) + word
    if deepness > 0:
        for similar in similarWords(word):
            printSimilar(similar, deepness - 1, indent + 1)

假设similarWords返回相似单词的列表,这应该会产生所需的输出。