有没有一种简洁的方法来测试PHP中的GET参数组合?

有没有一种简洁的方法来测试PHP中的GET参数组合?,php,conditional,Php,Conditional,下面的代码检查GET参数。页面上有两个选项,用于按类型和年龄组筛选列表 我正在寻找一种方法来重构测试类型/年龄组合的条件。有没有更清晰/简洁的方式来写 if ( isset($_REQUEST['type']) || isset($_REQUEST['age']) ) { // we need to do something $type = ( $_REQUEST['type'] == 'all' ? false : (int)($_REQUEST['type']) ); $age

下面的代码检查GET参数。页面上有两个选项,用于按类型和年龄组筛选列表

我正在寻找一种方法来重构测试类型/年龄组合的条件。有没有更清晰/简洁的方式来写

if ( isset($_REQUEST['type']) || isset($_REQUEST['age']) )
{
  // we need to do something

  $type = ( $_REQUEST['type'] == 'all' ? false : (int)($_REQUEST['type']) );
  $age = ( $_REQUEST['age'] == 'all' ? false : (int)($_REQUEST['age']) );


  // test the possible type/age combinations

  if ($type && $age) 
  {            
    $cats = $type . "," . $age;
  }
  elseif ($type)
  {
    $cats = $type;
  }
  elseif ($age)
  {
    $cats = $age;
  }
  else
  {
    $cats = false;
  }

  // do stuff with $cats;

}
如果['type']和['age']都是“all”,则结果将是“”,即字符串(0)。所以这是不一样的。这是否是一个问题取决于如何使用$cat。例如,
if(!$cat)
仍然有效,因为在布尔上下文中空字符串被转换为
false

编辑:哦,还有另一个区别。我在没有(特定)回调的情况下使用

如果未提供回调,则将删除所有等于FALSE(请参阅)的输入项。 例如,
$\u REQUEST=array('type'=>'0','age'=>'0')
也将导致
$cat=”“

在你的背景下,这是一个问题吗

如果['type']和['age']都是“all”,则结果将是“”,即字符串(0)。所以这是不一样的。这是否是一个问题取决于如何使用$cat。例如,
if(!$cat)
仍然有效,因为在布尔上下文中空字符串被转换为
false

编辑:哦,还有另一个区别。我在没有(特定)回调的情况下使用

如果未提供回调,则将删除所有等于FALSE(请参阅)的输入项。 例如,
$\u REQUEST=array('type'=>'0','age'=>'0')
也将导致
$cat=”“


这在您的上下文中是一个问题吗?

不确定它是否更清晰,但至少它更简洁了一点…:-)


[编辑]给出一个更简单的版本…

不确定是否更清晰,但至少更简洁一些…:-)


[编辑]提供更简单的版本…

避免使用请求超全局,因为数据可能来自意外的来源(POST、GET和COOKIE)。避免使用请求超全局,因为数据可能来自意外的来源(POST、GET和COOKIE)。请注意,避免
$\u请求
,并明确使用
$\u GET
$\u POST
更安全。有助于防止CSRF。请注意,避免
$\u请求
,并明确使用
$\u GET
$\u POST
更安全。有助于对抗CSRF。
$cat = array(
  $_REQUEST['type'] == 'all' ? false : intval($_REQUEST['type']),
  $_REQUEST['age'] == 'all' ? false : intval($_REQUEST['age'])
);

$cat = join(',', array_filter($cat));
echo $cat;
$cats = str_replace('all', '', "${_GET['type']},${_GET['age']}");
$cats = preg_replace('/^,|,$/', '', $cats);