验证URL查询值; switch语句vs in_array?

时间:2016-09-04 18:04:53

标签: php

在检查URL查询值是否合法时,比较下面两种方法时最好的方法是什么?他们都工作,但我想我会问,以防万一我可能忽视了什么。

切换vs if / else + 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

1 个答案:

答案 0 :(得分:0)

如果您只使用几个选项,我会说转换语句。但是,当代码变大时,这段代码将无法管理。

有些功能比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个地方,而不必每次都实际循环一个数组。 (in_array()真的很慢!)