You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组存在重复数据时限制页面访问的PHP代码问题排查

问题分析与修复方案

我一眼就瞅出你代码里的问题啦——你的第二个foreach循环逻辑踩坑了!当数组里同时存在重复和不重复元素时,循环会挨个执行跳转指令,可浏览器只会响应最后一个header()跳转。比如你的例子里,先碰到100100(重复,触发跳首页),但循环没停,后面又遇到100300(不重复,触发跳问卷),最后浏览器就执行了最后那个跳转指令,这就是为啥明明有重复却跳错页面的原因。

修正思路

根本不用遍历统计后的数组瞎折腾!我们只要一旦发现存在重复元素,立刻跳转首页并终止脚本;如果确认所有元素都不重复,再跳问卷页面就行。而且PHP有现成的函数能快速判断数组是否有重复,没必要自己写统计逻辑~

方案一:极简版(强烈推荐)

直接用PHP内置函数对比数组长度:

$no_id = array('100100','100200','100300','100200','100200','100100');

// 原数组和去重后的数组长度不一样,就说明有重复
if (count($no_id) !== count(array_unique($no_id))) {
    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])) {
        $array[$value] += 1;
    } else {
        $array[$value] = 1;
    }
}

// 先标记是否有重复,找到就跳出循环
$hasDuplicate = false;
foreach ($array as $alert => $n) {
    if($n >= 2) {
        $hasDuplicate = true;
        break; // 找到重复就不用继续找啦
    }
}

// 最后统一判断跳转
if ($hasDuplicate) {
    header('location:../../home');
} else {
    header('location:../../questionnair');
}
exit; // 别忘了终止脚本!

关键提醒

  • 跳转后一定要加exit;或者die();,不然脚本会继续往下跑,可能出现各种奇怪的问题。
  • header()必须在任何输出(包括空格、HTML标签)之前调用,要是之前有输出,可以用ob_start()开启输出缓冲来解决。

内容的提问来源于stack exchange,提问作者Aqua Rius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:04:20