PHP 在数组中异常


PHP In Array Exceptions

我在php中遇到一些问题in_array函数,我有一个需要$key变量的重置函数,我面临的是,如果uri_string是管理员/用户/重置,in_array不接受,并且我被重定向到登录页面,但是如果我将下面的代码修改为精确的密码重置键,例如管理员/用户/重置/密码重置密钥, 它不会像您猜到的那样重定向。

正如我从 php 手册中看到的那样,该字符串是否足以包含 uri_string 中的重置,否则我错了?

$exceptions = array('admin/user/login', 'admin/user/forgot', 'admin/user/logout', 'admin/user/reset');
if(in_array(uri_string(),$exceptions) == FALSE){
if($this->user_m->loggedin() == FALSE){
  redirect('admin/user/login');
}

您可以分解 uri_string 变量以创建段数组,然后通过第三个段进行in_array检查。那么你的例外就可以array('login', 'logout', 'reset', 'forgot');

$exceptions = array('login', 'forgot', 'logout', 'reset');
uri = explode('/', uri_string());
if(in_array(uri[2],$exceptions) == FALSE){
if($this->user_m->loggedin() == FALSE){
  redirect('admin/user/login');
}

in_array将传入的文本值与匹配数组中的文本值进行比较,它不会执行部分字符串。你可以做的是:

$exceptions = array('admin/user/login', 'admin/user/forgot', 'admin/user/logout', 'admin/user/reset');
foreach($exceptions as $exception) {
    if(strpos(uri_string(), $exception === false) {
        if($this->user_m->loggedin() == FALSE){
            redirect('admin/user/login');
        }
    }
}
// no exceptions caught if you get to here

您可能希望改用stripos(不区分大小写):http://www.php.net/manual/en/function.stripos.php