foreach函数仅显示最后一个值

时间:2014-10-16 10:57:32

标签: php

当我想要用当前用户ip检查所有值时,它只是检查当前用户的最后一个ip,我不知道为什么在值不检查之前。

我在这样的textarea中填写IP:176.227.213.74,176.227.213.78

                elseif($maintenance_for == '2') {
                $get_ips = $options['ips'];
                $explode_ips = explode(',',$get_ips);
                foreach ($explode_ips as $ips) {
                    if($ips == $_SERVER["REMOTE_ADDR"]){
                        $maintenance_mode = true;
                    }
                    else {
                        $maintenance_mode = false;
                    }
                }
            }

2 个答案:

答案 0 :(得分:3)

是的,你会一直覆盖它。最好设置默认值并仅设置一次: (编辑:添加@ Mathlight'答案,休息,按照他的建议在我的解决方案中)

$maintenance_mode = false;
foreach ($explode_ips as $ips) {
    if($ips == $_SERVER["REMOTE_ADDR"]){
        $maintenance_mode = true;
        break;
    }
}

编辑:记录的另一个解决方案,用于oneliner的点

$maintenance_mode = in_array($_SERVER["REMOTE_ADDR"], $explode_ips);

答案 1 :(得分:3)

如果找到正确的值,则不要BREAK

中的foreach loop
$get_ips = $options['ips'];
$explode_ips = explode(',', $get_ips);
foreach($explode_ips as $ips) {
    if ($ips == $_SERVER["REMOTE_ADDR"]) {
        $maintenance_mode = true;
        break; // If the IP is right, BREAK out of the foreach, leaving $maintenance_mode to true
    } else {
        $maintenance_mode = false;
    }
}