我有这个脚本,效果非常好。但如果我继续这样做,我最终会创建数百种变体。
<?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
等等......
答案 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");
答案 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);
现在看起来效果非常好,我希望它仍然足够安全!