我有一段我刚刚编写的代码,用于检测用户是否已登录,以及[1]和[2]是否在字符串中有任何特定文本,然后如果值为,则会将该人重新定位到另一个页面满足。
但我认为我的代码有点冗长。有没有办法简化我所拥有的或者这是我能得到的最好的东西?
if (!isset($_SESSION['user_id'])){
$dir = dirname($_SERVER['PHP_SELF']);
$dirs = explode('/', $dir);
if(isset($dirs[1])){
if (($dirs[1] == "account") || ($dirs[1] == "admin")){
header('Location: /');
}
}
if(isset($dirs[2])){
if(($dirs[2] == "account")){
header('Location: /');
}
}
}
提前致谢
答案 0 :(得分:2)
一种简单的方法是使用闭包
$dir = explode('/', dirname($_SERVER['PHP_SELF']));
$is = function($pos, $check) use($dir) {
return array_key_exists($pos, $dir) && $dir[$pos] == $check;
};
if($is->__invoke(1, 'account')
|| $is->__invoke(1, 'admin')
|| $is->__invoke(2, 'account')) {
header('Location: /');
}
答案 1 :(得分:1)
你可以这样做:
$dir = dirname($_SERVER['PHP_SELF']);
$dirs = explode('/', $dir);
if(in_array('account',$dirs) || in_array('admin', $dirs)){
header('Location: /');
}
答案 2 :(得分:0)
一些简单的解决方案可能是使用PHP的array_intersect($array1, $array2)
函数。这在php.net website上有详细记载,但这里有一个小例子:
// Define all the 'search' needles
$needles = array('account', 'admin');
// Get all the dirs
$dirs = explode('/', dirname( $_SERVER['PHP_SELF'] ));
// Check for needles in the hay
if( array_intersect($needles, $dirs) )
{
// Redirect
header('Location: /');
}
ADDED:您当然可以通过将多行合并为一条来使上述内容变得非常简单,这会让您:
if( array_intersect(array('account', 'admin'), explode('/', dirname($_SERVER['PHP_SELF']))) )
{
header('Location: /');
}