0

我有一段我刚刚编写的代码,它检测是否有用户登录,以及 [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: /');
        }
    }
}

提前致谢

4

3 回答 3

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: /');
}
于 2012-11-26T11:50:50.753 回答
1

例如,您可以这样做:

$dir =  dirname($_SERVER['PHP_SELF']);
$dirs = explode('/', $dir);

if(in_array('account',$dirs) || in_array('admin', $dirs)){
    header('Location: /');
}
于 2012-11-26T11:52:26.870 回答
0

一些更简单的解决方案之一可能是使用 PHP 的array_intersect($array1, $array2)函数。这在php.net 网站上有很好的记录,但这里有一个小例子:

// 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: /');    
}

补充:您当然可以通过将多行合二为一来使上述内容变得非常简单,这将为您留下:

if( array_intersect(array('account', 'admin'), explode('/', dirname($_SERVER['PHP_SELF']))) )
{
    header('Location: /');
}
于 2012-11-26T11:53:16.223 回答