组合PHP函数-高级搜索


Combining PHP Functions - Advanced Search?

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

  • 处于联机状态
  • 有评论
  • 等等

为了获得这些信息,我不能直接查询数据库。因此,我需要构建函数来实现这一点。

比方说。。。用户选择4或5个选项-如何组合多个功能结果?

做这样的事情是没有意义的:

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

因为我不知道选择了哪些或多少选项。。。所以我认为应该有一些动态的替代方案?

谢谢。

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

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

<?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一段时间后重新学习PHP是很有趣的:)