代码之家  ›  专栏  ›  技术社区  ›  meleyal

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

  •  0
  • meleyal  · 技术社区  · 15 年前

    下面的代码检查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 回复  |  直到 15 年前
        1
  •  4
  •   VolkerK    15 年前
    $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 在布尔上下文中。

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

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

    例如。 $_REQUEST = array('type'=>'0', 'age'=>'0') 也会导致 $cat="" .
    在你的背景下有问题吗?

        2
  •  -1
  •   PhiLho    15 年前

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

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

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