我有一个关于递归函数的问题。我对它正在做什么有一个很好的想法,但我需要它更详细地向我解释。我知道它传递$ val,要检查的$模式和$ suspect的布尔值。 但是为什么要递归地调用函数呢?我想我认为它试图做的是检查$ val是否是一个数组,如果它是一个数组然后遍历它并获取$ item和传递该项目(例如:[$ _POST ['name'] ..)并查看它是否为数组。显然,它将是一个字符串,此时第一个if语句将失败,因为$ item是一个字符串然后它将跳转到preg_match函数检查以查看该字符串是否包含我们设置要检查的模式$模式。
我是否在正确的轨道上?我的问题是为什么递归地将函数传递回自身?
// 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);
答案 0 :(得分:1)
考虑将这样的值传递给isSubject函数:
$val = array(arrray(array(1,2,3),4),5);
通过递归你可以得到:
所以在给定的例子中说,