2010-08-03 27 views
5

什麼是寫像一個真正的辦法:PHP做,如果短

if ($variable == '(value1/value2/value3)') { } 

它應該類似於:

if ($variable == 'value1' || $variable == 'value2' || $variable == 'value3') { } 

只想把這段代碼較短(現在我使用switch)。

謝謝。

+1

我會堅持'switch'自己。 – TRiG 2010-09-14 09:20:11

回答

16

嘗試in_array()

if (in_array($variable, array('value1', 'value2', 'value3'))) {} 

如果你碰巧有一組由分隔的值,在你的例子,一個/,只是explode()它,你就會有一個數組插到in_array()

if (in_array($variable, explode('/', 'value1/value2/value3'))) {} 

這似乎是你可以只使用strpos(),而不是因爲它是值的長字符串,但是這不一個將如何工作具有多個值的分隔字符串(如上面使用explode()代替,):

if (strpos('value1/value2/value3', $variable) !== false) {} 
+0

使用'strpos'並得到類似於「value1/val」或「ue1」的值 – 2010-08-03 03:23:41

+0

@valya:正是因此,'strpos()'不是正確的方法,即使它看起來有意義第一個:) – BoltClock 2010-08-03 03:24:36

+6

但使用正則表達式不是很簡單嗎?像:'if(preg_match('/%$ 6^$%^ - 'jil9(*&((&&(*&((&%%% 88&value1 *^*&^))&*!@#!value2% *^* ^&*^*^* value3','(value1/value2/value3)');'?有時候,如果你問我,你們就不會認爲是直的; – karim79 2010-08-03 03:27:49

2

還短:

if (preg_match('#^(?:value1|value2|value3)$#', $variable) { 

不在於它是一定要做到這一點的最好辦法。漫長的道路,只使用和||語句,即使冗長,也會很容易閱讀,並且運行效率最高。

+0

'價值[1-3]'適當的修改,以適應PHP的正則表達式也可以。 – 2013-04-03 01:15:28

+0

我認爲顯然value1,value2和value3只是爲了舉例的佔位符。 – thomasrutter 2013-04-03 03:07:26

2
switch ($variable) 
{ 
    case "value1": 
    case "value2": 
    case "value3": 
     ... 
     break; 
    default: // else 
     ... 
}