为了账号安全,请及时绑定邮箱和手机立即绑定

当阵列上的一个或多个数据重复时如何限制访问

当阵列上的一个或多个数据重复时如何限制访问

PHP
红颜莎娜 2021-11-26 19:57:32
如果我的英语不好,我很抱歉。我的代码有问题。当我的数组中有重复时,我如何停止访问。我的意思是,当数组中的一个或多个数据重复时,用户必须从第一页重复输入。当数组没有重复时,用户可以访问下一页。这是我尝试过的代码。$no_id=array('100100','100200','100300','100200','100200','100100');$array = array();foreach ($no_id as $key => $value){   if(isset($array[$value]))   {      $array[$value] += 1;   } else   {      $array[$value] = 1;   }}foreach ($array as $alert => $n){   if($n >= 2)   {      header('location:../../home');   } else   {      header('location:../../questionnair');   }}但是当发现重复数据时(数组100100有2条数据,100200有3条数据),系统仍然带用户访问问卷页面,而不是首页。感谢您的帮助。
查看完整描述

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;


查看完整回答
反对 回复 2021-11-26
?
呼如林

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)。


查看完整回答
反对 回复 2021-11-26
?
慕的地8271018

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()调用之前。在这里阅读更多。


查看完整回答
反对 回复 2021-11-26
  • 3 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信