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

时间:2009-10-19 14:17:44

标签: php conditional

下面的代码检查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;

}

2 个答案:

答案 0 :(得分:4)

$cat = array(
  $_REQUEST['type'] == 'all' ? false : intval($_REQUEST['type']),
  $_REQUEST['age'] == 'all' ? false : intval($_REQUEST['age'])
);

$cat = join(',', array_filter($cat));
echo $cat;

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

编辑:oops,还有另一个区别。我使用array_filter()而没有(特定)回调。

如果没有提供回调,则将删除所有输入等于FALSE的条目(参见converting to boolean)。

E.g。 $_REQUEST = array('type'=>'0', 'age'=>'0')也会产生$cat="" 这个在您的上下文中是一个问题吗?

答案 1 :(得分:-1)

不确定它是否更清晰,但至少它更简洁......: - )

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

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