1

有人可以解释为什么在调用 header($URL) 时,此代码中的 $URL 变量总是设置为“Location:unknown.php”吗?:如果我在第一行中注释掉声明/初始化,则代码有效,但我收到一个变量未声明的警告(如果我在 if 块之前声明 $URL 而不初始化它,我也会收到这些警告)。

$URL = 'Location: unknown.php';
if ($spring){
    if (($leaves)&&(!$stem)&&(!$root)&&(!$head)&&(!$whole)){$URL = 'Location: snow-mold.php';}
} else if ($other) {
    if ((!$leaves)&&(!$stem)&&(!$root)&&($head)&&(!$whole)){$URL = 'Location: o01.php';}
    if (($whole) || ($root) ){$URL = 'Location: o02.php';}
    if (($leaves)&&($stem)&&(!$root)&&($head)&&(!$whole)){$URL = 'Location: o03.php';}
    if (($leaves)&&($stem)&&(!$root)&&(!$head)&&(!$whole)){$URL = 'Location: o04.php';}
    if ((!$leaves)&&($stem)&&(!$root)&&($head)&&(!$whole)){$URL = 'Location: o03.php';}
    if (($leaves)&&(!$stem)&&(!$root)&&($head)&&(!$whole)){$URL = 'Location: o05.php';}
    if ((!$leaves)&&($stem)&&(!$root)&&(!$head)&&(!$whole)){$URL = 'Location: o06.php';}
    if (($leaves)&&(!$stem)&&(!$root)&&(!$head)&&(!$whole)){$URL = 'Location: o07.php';}
}
header($URL);

好的,我已经简化了代码以突出显示问题...

$spring = (isset($_POST['season']) && strcmp($_POST['season'],'spring') == 0);
$URL = 'Location: unknown.php';
if ($spring){
    $URL = 'Location: snow-mold.php';
}
header($URL);

总是重定向到 unknown.php。If I change $URL = 'Location: unknown.php'to $URL;, the code redirects to snow-mold.php if and only if spring is selected, But I get a $URL undefined warning.

4

1 回答 1

2

好吧,您可以使用一系列if-elsif构造重写您的代码 - 例如,您的穷人leaves将不会在该$other分支中被检查 7 次。

但我建议另一种方法:实现一个(某种)散列函数,将所有这些树部分作为参数(或者,更好的是,将这些值作为键的单个关联数组):

function happy_tree_hash($leaves, $stem, $root, $head, $whole) {
    // assuming each of this can be only TRUE or FALSE,
    // a bit mask should suffice:
    return (bool)$leaves << 4 
        | (bool)$stem << 3 
        | (bool)$root << 2 
        | (bool)$head << 1 
        | (bool)$whole;
}

...然后$url从一个简单的关联数组为您的变量赋值:

$locations = array(
  5 => 'o02.php',  // whole and root
  16 => 'o07.php', // leaves only 
  ... 
);
...
$key = happy_tree_hash($leaves, $stem, $root, $head, $whole);
if (isset($locations[$key])) {
    $url = $locations[$key];
} else {
    $url = 'unknown.php'; 
}
header("Location: $url");
于 2012-09-17T16:02:32.007 回答