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

いくつかの簡単な解決策の1つは、PHPのarray_intersect($array1, $array2)関数を使用することです。これはphp.netWebサイトで十分に文書化されていますが、ここに小さな例があります。

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

追加:もちろん、複数の行を1つに結合することで、上記を非常に単純にすることができます。これにより、次のようになります。

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