PHP:基于无线电选择的各种结果

时间:2013-04-30 15:41:35

标签: php multiple-choice

我有这个脚本,效果非常好。但如果我继续这样做,我最终会创建数百种变体。

    <?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个可能的网址中的1个

例如,如果用户选择了“url-mostly-a”,则会回显: AAAA AAAB AABA ABAA 咩咩咩 AAAC AACA ACAA CAAA

等等......

5 个答案:

答案 0 :(得分:0)

如果您理解正确,首先需要找到数组$_GET中最常见的值。

为此你需要重复计算:

array_count_values($_GET);

然后迭代并找到最大值。


编辑:

然后你可以使用它来获得具有最大值的关键“名称”:

$arrayCnt = array_count_values($_GET);
$theKey = array_search(max($arrayCnt), $arrayCnt)

答案 1 :(得分:0)

正在搜索这样的内容吗?:

foreach(array(
    'a' => 'http://aaaaaa...', 
    'b' => 'http:/bbbb',
    // ...
as $check => $url) {
    if($q1 == $check && $q2 == $check && $q3 == $check && $q4 == $check) {
        header("Location: $url");
    }
}

答案 2 :(得分:0)

4行应该这样做:

$count = array_count_values($_GET);
arsort($count);
$answers = array_keys($count);
header("Location: http://www.mostly-{$answers[0]}.co.uk");
  1. count values occurences
  2. 反向排序值
  3. 获取带有键的数组(仍然排序)
  4. 使用数组的第一个值

答案 3 :(得分: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);

答案 4 :(得分:0)

感谢M8R-1jmw5r,

我调查了它的意思,并基本掌握了所有这一切,谢谢!最后一部分似乎没有工作,所以我也改变了它:

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

现在看起来效果非常好,我希望它仍然足够安全!