递归函数说明

时间:2014-10-11 20:43:57

标签: php function recursion

我有一个关于递归函数的问题。我对它正在做什么有一个很好的想法,但我需要它更详细地向我解释。我知道它传递$ val,要检查的$模式和$ suspect的布尔值。 但是为什么要递归地调用函数呢?我想我认为它试图做的是检查$ val是否是一个数组,如果它是一个数组然后遍历它并获取$ item和传递该项目(例如:[$ _POST ['name'] ..)并查看它是否为数组。显然,它将是一个字符串,此时第一个if语句将失败,因为$ item是一个字符串然后它将跳转到preg_match函数检查以查看该字符串是否包含我们设置要检查的模式$模式。

我是否在正确的轨道上?我的问题是为什么递归地将函数传递回自身?

CODE:

// Assume nothing is suspect
$suspect = false;

// Create a pattern to locate suspect phrases
$pattern = '/Content-Type:|Bcc:|Cc:/i';

// Function to check for suspect phrases

function isSuspect($val, $pattern, &$suspect) {
if(is_array($val)) {
    foreach($val as $item) {
        isSuspect($item, $pattern, $suspect);
    }
} else {
    // If one of the suspect phrases is found, set Boolean to true
    if (preg_match($pattern, $val)) {
        $suspect = true;
        }
    }
}

   // check the $_POST array and any subarrays for suspect content
   isSuspect($_POST, $pattern, $suspect);

1 个答案:

答案 0 :(得分:1)

考虑将这样的值传递给isSubject函数:

$val = array(arrray(array(1,2,3),4),5);

通过递归你可以得到:

  1. 每次你打一个阵列,深入挖掘
  2. 每次点击字符串时,将其与模式
  3. 进行比较
  4. 如果我们找到一个名为$ suspect
  5. 的全局状态变量的主题,请跟踪

    所以在给定的例子中说,

    1. 递归级别:检查数组(arrray(array(1,2,3),4),5);
    2. 递归级别:检查arrray(array(1,2,3),4)和5
    3. 递归级别:检查数组(1,2,3)和4
    4. 递归级别:检查1和2以及3