2012-09-05 27 views
0

我在PHP if聲明中使用OR||似乎有一個神祕的問題。我的代碼是這樣的:PHP if OR

if ($region=='ibiza' || 'mallorca' || 'menorca' || 'andalucia' || 'basque' || 'cataluna' || 'centralspain' || 'greenspain' || 'pyrenees' || 'rioja' || 'valencia') { 
    $GoTo = "/spain/".$region.".php";  
} 

不管我給$region什麼價值,$GoTo永遠是爲/spain/$region.php即如果第一循環總是評估爲「真」。還有其他方法可以做到這一點,但我不明白爲什麼這種方法不起作用。

回答

4

答案@Fluffeh貼的是正確的。編輯:@Findus解釋也是正確的。

,如果你想偷懶,你可以做這樣的:

if(in_array($region,array('ibiza','mallorca','menorca','...','..'))){} 
+2

是的,正是我寫我的初始文章:) – Fluffeh

+2

這不是懶惰,它是一個更可讀的方式做到這一點。 –

+0

@MattHumphrey是啊,但說實話最主要的原因我做到這一點:由於IM懶惰 – Ties

4

您想使用或聲明是這樣的:

if ($region=='ibiza'||$region=='mallorca'||$region=='menorca'....) 

但在你的情況,你可能想使用in_array()

$locals=array(ibiza','mallorca','menorca','andalucia','basque','cataluna','centralspain','greenspain','pyrenees','rioja','valencia') 
if (in_array($region, $locals)) { 
    $goto="something..."; 
} 
+0

哈哈懶!!!!!!!!! ;) – Ties

1

這是因爲語句「馬洛卡」(和接下來的)評估爲真。 你應該使用比較,如$ region ==「mallorca」,以及其他所有的類似。

0

你必須寫,如果像這樣

if ($region=='ibiza'|| $region=='mallorca'|| $region=='menorca'|| $region=='andalucia'|| $region=='basque'|| $region=='cataluna'|| $region=='centralspain'|| $region=='greenspain'|| $region=='pyrenees'|| $region=='rioja'||$region=='valencia') { 
$GoTo = "/spain/".$region.".php"; 
} 
+0

感謝Harry(和Findus)。我想我可以通過我的方法縮短if語句的長度,但顯然不是!至少我現在已經證實我不能那樣做。 – TrapezeArtist

1

語句可以simlify你這樣的代碼:

<?php 
    $selectedRegions1 = array('ibiza','mallorca','menorca','andalucia','basque','cataluna', 'centralspain','greenspain','pyrenees','rioja','valencia'); 
    $selectedRegions2 = array('brittany','burgundy','alps','aquitaine','loire','languedoc', 'paris','provence'); 
    $selectedRegions3 = array('grancanaria','lapalma','lanzarote','tenerife'); 
    $selectedRegions4 = array('atlas','essaouira','fez','marrakech'); 
    if (in_array($region, $selectedRegions1)) { 
     $GoTo = "/spain/".$region.".php"; 
    }elseif(in_array($region,$selectedRegions2)) { 
     $GoTo = "/france/".$region.".php"; 
    }elseif (in_array($region,$selectedRegions3)) { 
     $GoTo = "/canaries/".$region.".php"; 
    }elseif (in_array($region,$selectedRegions4)) { 
    $GoTo = "/morocco/".$region.".php"; 
    } 
?> 

與您的代碼的問題是,你忘了「$區==」後的「||」:

if ($region=='ibiza'|| $region=='mallorca'|| $region=='menorca'|| $region=='andalucia'|| $region=='basque'|| $region=='cataluna'|| $region=='centralspain'|| $region=='greenspain'|| $region=='pyrenees'|| $region=='rioja'|| $region=='valencia') 
+0

那不是簡化的 – allen213

+0

我沒有忘記'$ region ==';我只是覺得我不需要它。無論如何,現在代碼已被修改,頁面已經啓動並正常工作,所以再次感謝所有費力回覆的人。 – TrapezeArtist