简化PHP if和数组

时间:2012-11-26 11:45:07

标签: php

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

提前致谢

3 个答案:

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