2012-09-21 57 views
0

我一直在撓我的頭,試圖弄清楚這一點。如果設置了一個值,則進行檢查,否則忽略

我有一個數組,看起來像...

$param = array(
    "conditionType" => $_GET['conditionType'] ? strtolower($_GET['conditionType'])  : "all", 
    "minPrice"  => $_GET['minPrice']  ? $_GET['minPrice']       : false, 
    "maxPrice"  => $_GET['maxPrice']  ? $_GET['maxPrice']       : false, 
); 

我需要檢查,以確保返回的所有書都> =最小价格和< =最高價,但如果這些用戶選擇不指定最小或最大價格比if語句需要忽略此檢查。

if(($param['conditionType'] == "all" 
    || ($param['conditionType'] == "new" && strtolower($book['sub_condition']) == "new") 
    || ($param['conditionType'] == "used" && strtolower($book['sub_condition']) != "new")) 

    && ($param['minPrice'] && $book['price'] >= $param['minPrice']) 
    && ($param['maxPrice'] && $book['price'] <= $param['maxPrice']) 
    && $book['price'] != "null" 
    ){ 
     $books[] = array(
     "link"      => $book['link'], 
     "listing_condition"   => $book['sub_condition'], 
     "listing_price"    => $book['price'] 
    ); 
    } 

我可以在if語句中更改哪些內容以確保發生這種情況?

+0

條件的相關部分看起來OK。如果這種行爲不正確,請將其分解並進行調試。 – Jon

+0

@Jon我可能不夠清楚,我寫'$ param ['minPrice'] && $ book ['price']> = $ param ['minPrice'])''的部分不會總是通過,因爲'$ param ['minPrice']'可以設置爲false,如果設置爲false,則表示用戶不希望按價格限制搜索,如果情況比它需要能夠通過if聲明 –

+0

對不起,我的錯誤。再看一遍。 – Jon

回答

1

您需要重組,上面寫着像

&& ($param['minPrice'] && $book['price'] >= $param['minPrice']) 

,而不是念想

&& (!$param['minPrice'] || $book['price'] >= $param['minPrice']) 

在此之前,您所陳述的邏輯部分:要麼一分鐘的價格不應該被設定,或者它必須是小於或等於圖書價格。

+0

只要我寫回復給你我明白我需要做什麼,無論如何,我仍然有你要感謝它 –

+0

也是這個正確的解決方案 –

+2

橡皮鴨調試:) –

0

你只需要否定這種$param['minPrice']!$param['minPrice']

相關問題