[英]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.