下面的代码检查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;
}
答案 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);
[编辑]给出一个更简单的版本......