0

高度な検索機能を構築する必要があり、そのオプションのいくつかは複雑です。例えば:

  • オンラインです
  • コメントあり

この情報を取得するために、直接データベース クエリを作成することはできません。したがって、これを行うには関数を構築する必要があります。

たとえば... ユーザーが 4 つまたは 5 つのオプションを選択した場合、複数の関数の結果をどのように組み合わせることができますか?

次のようなことをしても意味がありません。

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

どのオプションが選択されているか、またはいくつのオプションが選択されているかわからないため...動的な代替手段が必要だと思いますか?

ありがとうございました。

4

1 に答える 1

2

詳細なしでより良い回答を提供することは困難ですが、これが役立つ場合があります。以下は、各チェックボックスがチェックされていない場合、またはそのチェックボックスに関連付けられたロジックが 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 に戻るのは楽しかったです :)

于 2013-09-02T01:58:18.950 に答える