簡體   English   中英

實施類別過濾器的正確方法

[英]The right way to implement a category filter

我對應該如何實現/實現過濾器功能感到非常困惑。

所以我是一個簡單的復選框,帶有4個值:val1,val2,val3,val4,它必須像類別過濾器一樣工作。 如果用戶選擇val1,則val3僅顯示該類別的結果。

好的,所以問題是我應該如何在后端中實現此功能。 我認為最好的主意是使用switch函數,但問題是$ filterData會以以下格式帶來值:val1,val3,val4,因此可以進行開關和操作。

我當時想嘗試使用','作為膠水將其內爆,但是從我嘗試過的努力直到現在我都沒有成功。

它應該像這樣工作

switch ($filterData)
{
      case 'Values of filter data' (ex: val3 and val4 ):
          $result[$value.'Results'] = $this->_$value($data);
      break;
}
return $result;

我試圖做一個

$filterData = implode(',',$filterData);
foreach ($filterData as $key => $value)
{
     switch ($value){
         case $value:
              $result[$value.'Results'] = $this->_$value($data);
         break;}
}

但問題是,這將返回以下內容:

Array
(
    [value1Results] => value1
)

Array
(
    [value1Results] => value1
    [value2Results] => value2
)

Array
(
    [value1Results] => value1
    [value2Results] => value2
    [value3Results] => value3
)

任何想法如何實現/解決這個問題?

如果我了解得很清楚,則必須在switch中指定每個val#並使用switch($key)而不是switch($value)

//page.php?val1=value1&val3=value3

$filterData = $_GET; //for example

foreach ($filterData as $key => $value)
{
     switch ($key) {
         case 'val1':
         case 'val3':
              $result[$value.'Results'] = $this->_$value($data);
         break;
         //continue
}
}

實現類別過濾器的正確方法通常是在數據庫級別使用In語句。

http://dev.mysql.com/doc/refman/5.0/zh/comparison-operators.html#function_in

如果您真的必須在PHP級別上執行此操作,建議您使用itterator / loop來檢查每個結果,並在您的集合中添加http://php.net/manual/en/function.in-array.php之類的內容,並將其添加到一個新的數組。 這將比在數據庫級別上慢得多。

如果我理解這個問題,問題是在switch語句中,條件僅被評估一次,並且將結果與每個case語句進行比較。 因此,switch語句不能滿足您的要求,因為它只評估第一個匹配值(正如您提到的那樣,這就是您遇到的情況)。 相反,只需在foreach循環中使用簡單的if,就像這樣:

//initialize result
foreach ($filterData as $key => $value)
{
   if ($key)=='val1':
   //append this category results to the result

}

好的,這是適合我的解決方案

$filterData = explode(',', $parameters['filter']);
     foreach ($filterData as $key => $value)
     {
             switch($value)
             {
                 case $value:
                     $value = '_'.$value;
                     $searchResults[$value] = $this->$value($parameters);
                 break;
             }
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM