2016-09-04 5 views
0

URLクエリ値が正当なものであるかどうかを調べるときは、以下の2つの方法を比較するときに最も良い方法は何でしょうか?彼らはどちらも動作しますが、私は何か見落としてしまった場合に備えて尋ねると思いました。URLクエリ値の検証。 switch文とin_array?

スイッチ/他+ in_array()

/* 
    example.com/page/my-value 
    ^example.com/page.php?q=my-value 
*/ 

$page = null; 


# OPTION A 
$valid_pages = array('my-value-1', 'my-value-2', 'my-value-3'); 
if (in_array($_GET['q'], $valid_pages)) { 
    $page = $_GET['q']; 
} else { 
    header("location: http://www.example.com"); 
    exit; 
} 

#OPTION B 
switch ($_GET['q']) { 
    case 'my-value-1': 
    case 'my-value-2': 
    case 'my-value-3': 
     $page = $_GET['q']; 
    break; 
    default: 
     header("location: http://www.example.com"); 
     exit; 
    break; 
} 


# Do something with $page 

答えて

0

あなただけのいくつかのオプションを使用している場合、私はswitch文のために行くと言うだろう場合は対。ただし、このコードは大きくなるとアンマネージではありません。

in_array()よりも速い機能があります。実際にはかなり遅いです。

PHPでは、配列キーに文字列を付けることができます。あなたの意図を正しく理解していれば、値の代わりに配列キーを設定する方が良いでしょう。

$valid_pages = array('my-value-1' => '', 'my-value-2' => '', 'my-value-3' => '');

は、その後、あなたは単純にそうように、$_GETを通じて適切な配列のキーを呼び出すことができます。

if(isset($valid_pages[$_GET['q']]){ 
    //valid page 
} 
else{ 
//not a valid page, 
} 

このようなシステムはより速く多く、だけでなく、非常にダイナミックではないでしょう!これは、ページを配列に追加するときに壊れません。基本的には、実際に毎回アレイをループすることなく、3つの場所ではなく1つの場所を編集するだけで済みます。 (in_array()は本当に遅いです!)