结合PHP函数 - 高级搜索?

时间:2013-09-01 22:57:55

标签: php

我必须构建一个高级搜索功能,其中一些选项很复杂。例如:

  • 在线
  • 有评论

要获取此信息,我无法进行直接数据库查询。所以,我需要构建函数来做到这一点。

假设...用户选择4或5个选项 - 如何组合多个功能结果?

执行以下操作是没有意义的:

if(is_Online() && have_Comments()...)

因为我不知道选择了哪个或多少个选项...所以我认为应该有一些动态的选择?

谢谢。

1 个答案:

答案 0 :(得分:2)

如果没有更详细的信息,很难提供更好的答案,但这可能会对您有所帮助。以下假设您的if语句将在未选中每个复选框或与该复选框关联的逻辑返回true时继续。

我倾向于将每个函数存储在一个数组中,并根据您正在查看的字段的名称动态调用它们。

<?php

$resultCheckers = array(
   'is_Online' => function() { /* Is Online logic here */}, 
   'have_Comments' => function() { /* Have Comments logic here */}
);

function IsUncheckedOrHasValue($parameter)
{
   $result = true;
   //Check if user has checked the box for this parameter
   if(array_key_exists($parameter, $_POST))
   {
      //Check if this is a valid key in your $resultCheckers
      if(array_key_exists($parameter, $resultCheckers))
      {
         //Run the result Checker
         $result = $resultCheckers[$parameter]();
      } else {
         $result = false;
      }
   }
   return $result;
}


?>

你的if语句看起来像这样:

if(IsUncheckedOrHasValue('is_Online') && IsUncheckedOrHasValue('have_Comments'))
{
...
}

阅读起来有点费力,所以如果你想要,你可以将它进一步抽象到它自己的函数中:

function IsMatch()
{
    $isMatch = IsUncheckedOrHasValue('is_Online') && 
               IsUncheckedOrHasValue('have_Comments') &&
               IsUncheckedOrHasValue(...) &&
               IsUncheckedOrHasValue(...);

    return $isMatch;
}

那么你的if语句将最终成为

if(IsMatch())
{
...
}

注意:我有点困惑,你没有将有关结果的任何信息传递给你的检查功能。您是在编写面向对象的,并且该信息在当前对象中可用?或者您可能为了简洁而省略了这些额外的参数。无论如何,我希望这对你有所帮助,在离开它之后重新回到PHP很有趣:)