3 回答
TA贡献2016条经验 获得超9个赞
我认为主要的问题是你应该总是exit()在使用header()with location后使用,否则页面会继续执行。
如果第一个值是唯一值,因为第一个循环总是如此,这仍然会导致问题exit;。
您可以解决这个问题(只有header()在值 > 2时才调用,然后在循环之后所有的默认值都是唯一的),但另一种方法是使用array_count_values()它计算列表中存在的每个值的数量,然后用于max()查找最常见的一种,然后针对它进行测试......
$no_id=array('100100','100200','100300','100200','100200','100100');
$n = max(array_count_values($no_id));
if($n >= 2)
{
header('location:../../home');
exit;
} else
{
header('location:../../questionnair');
exit;
}
更新:
另一种稍微快一点的版本是使用原始的第一个循环,但是一旦检测到该值已经设置,它就可以停止工作,然后返回......
$no_id=array('100100','100200','100300','100200','100200','100100');
$array = array();
foreach ($no_id as $key => $value)
{
if(isset($array[$value]))
{
header('location:../../home');
exit;
} else
{
$array[$value] = 1;
}
}
header('location:../../questionnair');
exit;
TA贡献1798条经验 获得超3个赞
如果您只需要检查数组是否有重复,您可以使用array_unique新数组和旧数组进行比较。如果数组不相同,则意味着存在重复项。
用代码:
$no_id = array('100100','100200','100300','100200','100200','100100');
$new_array = array_unique($no_id);
if (count($no_id) == count($new_array)) {
// 2 arrays have same number of items => they are equal => no duplicates
$redirect = "questionnair.php";
} else {
// 2 arrays have different number of items => they are not equal => duplicates
$redirect = "home.php";
}
header("location: {$redirect}");
注意
您必须重定向到另一个 PHP 页面(例如 home.php 而不仅仅是 home)。
TA贡献1796条经验 获得超4个赞
首先,使用array_unique函数更简单,它将删除所有重复值。之后您可以进行检查,如果没有任何更改,则没有重复的项目。
像这样:
$no_id=array('100100','100200','100300','100200','100200','100100');
$no_id_unique = array_unique($no_id);
if(count($no_id)===count($no_id_unique)){
header('location:../../questionnair');
}else{
header('location:../../home');
}
exit();
您../在路径中使用的下一件事,这意味着go to parent directory. 我不知道你的环境,但很可能这是一个坏主意。
根据文档,最好指定必须转发用户的页面的完整 url:
header("Location: http://www.example.com/home/");
另外,请注意,您需要阻止脚本的所有其他输出,尤其是在header()调用之前。在这里阅读更多。
- 3 回答
- 0 关注
- 160 浏览
添加回答
举报