我有这个脚本,它运行得非常好。但如果我继续这样做,我最终会创造出数百种变化。
<?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");
- 计数出现次数
- 值反向排序
- 获取一个包含键(仍然排序)的数组
- 使用数组 的第一个值
如果您理解正确的话,您首先需要找到数组$_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);
这现在似乎工作得很好,我希望它仍然足够安全!