2011-04-05 78 views
2

我可以這樣做這是有效的PHP嗎?複雜的if語句

if($x != (y&&z&&r&&w)) 

還是我必須把它寫這樣

if($x!=y && $x!=z && $x!=r && x!=w) 

只是想知道,因爲我有很多的變量來比較,只是希望有一個更優雅的解決方案。

無論如何,您可能會有更優雅的解決方案。這是我想要做的。

foreach($_POST as $key => $value){ 
     if($key != 'category_id'){ 
      $cp[$key] = $value; 
     } 
    } 

而且我有大約6個變量在我的$ _ POST語句來比較,我想使代碼漂亮。它基本上是一個巨大的表單,需要使用特定的鍵格式化爲特定的數組($ cp [])以使用我的MySQL插入語句。

任何奇特的想法?

回答

4

你的代碼,第一部分:

if($x != (y&&z&&r&&w)) 

將評估常數yzrw(字符串'y''z''r''w',如果不存在這些常量);在每一個之間做一個AND

然後,此AND的結果將與$x進行比較 - 這將被視爲布爾值。


所以,不,它不是很符合你所希望的;你必須使用你的代碼的第二部分:

if($x!=y && $x!=z && $x!=r && x!=w) 

注意,這裏也一樣,它會搜索名爲y常數,zrw(或字符串,如果這些常量仍然不存在) - 如果您希望將它們視爲變量,那麼您應該在其前面放置一些$


如果你想測試一個變量有多個值之一,一個可能的解決方案是把這些值到一個數組裏,然後,使用in_array()功能:

if (in_array($x, array(10, 20, 30))) { 
    // $x is one of those values : 10, 20, 30 
} 

有些人認爲理解這種方式比編寫幾個比較更容易 - 我有時會自己使用它,並且有點像它。

+0

當然,我只是用速記。來表示變量/字符串/整數,不管。我會有更具體的東西來比較它。 IE if($ key!= $ x && $ key!= $ y)。感謝你的回答! – Ryan 2011-04-05 22:07:13

2

您必須編寫長表格或使用in_array和包含您的值的數組。

0

你不能說

if ($x != (1&&2&&3)) 

我也想知道我在早些年,我們是否可以做

if (1 < $x < 5) 

,答案是沒有過。但是你可以使用in_array()在陣列中,如果事情來測試你在一次檢查幾個值:

http://php.net/manual/en/function.in-array.php

1

您可以做這樣的:

if($x != (y&&z&&r&&w)) 

他們有被分離出來進行4次比較。

或者,你可以做的是堅持的價值觀在一個數組,只有1個比較:

$skip_keys = array('a', 'b', 'c', 'd'); 

foreach ($_POST AS $key => $value) { 
    if (! in_array($key, $skip_keys)) { 
     // Continue 
    } 
} 
+0

謝謝。這更多的是我正在尋找的解決方案。優雅,小巧,易於管理。 – Ryan 2011-04-05 22:08:43

0

我的建議,如果你這樣做comparions多次,是編寫驗證功能你的要求。所以你會傳入你的'$ x'並且可以將它與你需要的一切進行比較,並且會得到一個布爾結果。該函數可以用ifs和elseifs很好地構造,並且可以保持代碼更清晰。

因此,例如...

<?php 
// random, bad logic, but you get the idea 
function validateThisThing($x) { 
    $toReturn = false; 
    if ($x == 'this') { 
     $toReturn = true; 
    } elseif ($x == 'that') { 
     $toReturn = true; 
    } 
    return $toReturn; 
} 

然後,你可以使用該功能需要,並保持你的支票更清潔,更有條理爲您的函數名會帶來上下文的INTO被檢查什麼。