0

我有这个脚本,效果很好。但如果我继续这样做,我最终会创造出数百种变化。

    <?php

$q1 = $_GET["q1"];
$q2 = $_GET["q2"];
$q3 = $_GET["q3"];
$q4 = $_GET["q4"];


if ( $q1 == "a" && $q2 == "a" && $q3 == "a" && $q4 == "a" ) {
    header("Location: http://www.mostly-a.co.uk");
    exit;    
}

if ( $q1 == "b" && $q2 == "b" && $q3 == "b" && $q4 == "b" ) {
    header("Location: http://www.mostly-b.co.uk");
    exit;    
}

?>

基本上我需要脚本根据给出的答案来回显 5 个可能的 url 中的 1 个

例如,如果用户选择了“url-mostly-a”,则会回显:aaaa aaab aaba abaa baaa aaac aaca acaa caaa

等等等等……

4

5 回答 5

0

正在寻找这样的东西吗?:

foreach(array(
    'a' => 'http://aaaaaa...', 
    'b' => 'http:/bbbb',
    // ...
as $check => $url) {
    if($q1 == $check && $q2 == $check && $q3 == $check && $q4 == $check) {
        header("Location: $url");
    }
}
于 2013-04-30T15:47:34.177 回答
0

如果你理解正确的话,你首先需要的是在 array 中找到最常见的值$_GET

为此,您需要计算重复项:

array_count_values($_GET);

然后迭代并找到最大的值。


编辑:

然后,您也许可以使用它来获取具有最大值的键“名称”:

$arrayCnt = array_count_values($_GET);
$theKey = array_search(max($arrayCnt), $arrayCnt)
于 2013-04-30T15:45:40.150 回答
0

4行应该做到这一点:

$count = array_count_values($_GET);
arsort($count);
$answers = array_keys($count);
header("Location: http://www.mostly-{$answers[0]}.co.uk");
  1. 计数值出现
  2. 值的反向排序
  3. 得到一个带有键的数组(仍然排序)
  4. 使用数组的第一个值
于 2013-04-30T15:53:41.950 回答
0

以下是一个工作代码示例。它验证了输入,如您所见,输入验证是任何脚本的很大一部分。

// configuration

$qsValidKeys  = ['q1' => 0, 'q2' => 0, 'q3' => 0, 'q4' => 0];
$qValidValues = ['a', 'b', 'c', 'd'];

// input

$qsGet = array_intersect_key($_GET, $qsValidKeys);

if (!$qsGet) {
    trigger_error('No input given.');
    return;
}

$qsFiltered = [];

foreach ($qsGet as $key => $value) {
    if (in_array($value, $qValidValues, true)) {
        $qsFiltered[$key] = $value;
    } else {
        trigger_error(sprintf('Invalid Input value for "%s".', $key));
    }
}

if (!$qsFiltered) {
    trigger_error('No input given (filtered).');
    return;
}

// processing

$count = array_count_values($qsFiltered);
arsort($count);
$topAnswer = array_keys($count)[0];
$location = sprintf("http://www.mostly-%s.co.uk", $topAnswer);
于 2013-04-30T20:17:16.427 回答
0

感谢 M8R-1jmw5r,

我研究了这一切意味着什么,并基本掌握了这一切,非常感谢!最后一部分似乎没有工作,所以我也改变了它:

$location = printf('Click <a href="http://www.open.ac.uk/'.'%s'.'/">here</a> to view your results', $topAnswer);

现在这似乎工作得很好,我希望它仍然足够安全!

于 2013-05-01T08:41:37.340 回答