我在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