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


PHP: Various outcomes based on radio selections

我有这个脚本,它运行得非常好。但如果我继续这样做,我最终会创造出数百种变化。

    <?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给出答案

例如,"url-most -a"会被回显如果用户选择:aaaa级aaabaabaabaa字样的aaacaacaacaacaaa

等等…

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. 使用数组
  5. 的第一个值

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

你需要得到一个重复的计数:

array_count_values($_GET);

然后迭代找到最大的值。


编辑:

那么你可能可以使用这个来获得键"name"的最大值:

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

正在搜索这样的东西吗?:

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

下面是一个工作代码示例。它验证了输入,正如您所看到的,输入验证是任何脚本的重要组成部分。

// 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);

谢谢M8R-1jmw5r,

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

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

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