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

如果我的英语不好,我很抱歉。


我的代码有问题。当我的数组中有重复时,我如何停止访问。我的意思是,当数组中的一个或多个数据重复时,用户必须从第一页重复输入。当数组没有重复时,用户可以访问下一页。


这是我尝试过的代码。


$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条数据),系统仍然带用户访问问卷页面,而不是首页。


感谢您的帮助。


红颜莎娜
浏览 161回答 3
3回答

慕沐林林

我认为主要的问题是你应该总是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;

呼如林

如果您只需要检查数组是否有重复,您可以使用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)。

慕的地8271018

首先,使用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()调用之前。在这里阅读更多。
打开App,查看更多内容
随时随地看视频慕课网APP