[英]PHP counting varibles and redirecting
我一直在摸索实现这一目标的最佳方式。
我从一个 url 得到 8 个变量:a=imagine b=lead c=champion d=champion e=champion f=champion g=lead h=champion
在这个例子中有 5 个“冠军”,所以我会重定向到我的冠军页面。
我已将它们添加到数组中:
$a = $_GET["a"]; $b = $_GET["b"]; $c = $_GET["c"]; $d = $_GET["d"]; $e = $_GET["e"]; $r = $_GET["r"]; $g = $_GET["g"]; $h = $_GET["h"];
$info = array($a,$b,$c,$d,$e,$f,$g,$h); print_r(array_count_values($info));
然后打印: Array ( [imagine] => 1 [lead] => 2 [champion] => 5 )
我做得对吗? 我如何使用这些值重定向到我的冠军页面,因为这是最高计数?
如果我理解正确:
$list = ['imagine' => 1 ,'lead' => 2, 'champion' => 5 ];
// find the highest count
$highest = max($list);
// check what page it is
foreach($list as $page=>$count){
// redirect
if($count === $highest){
header('Location: ' . $page);
exit();
}
}
请注意,依赖用户输入是不安全的。 我还会查找页面的白名单。
首先,我同意array_count_values
是一个很好的工具,但您不需要使用所有$a
、 $b
等变量创建一个新数组。 你可以做
$info = array_count_values($_GET);
完成后,您可以按降序对数组进行排序,然后使用第一个键来查找要重定向到的页面。
arsort($info);
$location = key($info);
我同意另一个答案,即根据用户输入重定向到页面是有风险的,您不应该在未首先验证位置有效的情况下重定向。 如果您只有几个有效的位置,这可能很简单:
if (in_array($location, ['champion', 'lead', 'imagine'])) {
header("Location: yourdomain/$location");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.