2012-03-16 104 views
3

使用||(或)PHP或聲明||

我,我需要與同一個變量來比較如此多的價值,是否有更好的方式來寫更有效,如$city == -35 || -34 || -33或更簡單,這樣我就不必重複變量名稱,因爲它是相同的變量只有值不斷變化。

<?php 

if ($city == -35 || $city == -34 || $xcity == -33) 
{ 
    $region = "noindex"; 
} 

?> 

有什麼建議嗎?

+1

對於這種特殊情況,'$ city> -36 && $ city <-32' :) – Ryan 2012-03-16 01:08:17

回答

6

您可以使用in_array()

if (in_array($city, array(-35, -34, -33))) { 
    $region = "noindex"; 
} 

或者,如果他們是連續的(我suspec他們不是,這只是一個例子)

in_array($city, range(-35, -33)) 
+0

當我嘗試上面的代碼時,我得到了這個錯誤? '解析錯誤:語法錯誤,意外的'{'在702線上的/home/webzds/public_html/index.php' – Mas 2012-03-16 01:48:42

+0

@Mas它只是缺少一個')'。固定在上面。 – 2012-03-16 02:28:00

+0

太棒了!它正在工作,謝謝! – Mas 2012-03-16 04:36:33

4

是的。使用in_array

in_array($city, array(-35,-34,-33)) 
1

你可以使用:

if (in_array($city, array(-35, -34, -33)) 
1

假設$xcity是一個錯字,

switch ($city) 
{ 
case -35: 
case -34: 
case -33: 
    $region = "noindex"; 
    break; 
} 
+1

不知道爲什麼這不是公認的答案。雖然稍微比'in_array'建議冗長(而且我不確定這兩者的執行時間),但這是做OP所要求的「正確」方式。 – 2013-09-27 07:59:20

0

使用關聯數組。 in_array將數組中的每個元素與你的var進行比較。關聯數組使用散列表。它更快。

$cities = array(-33 => 1, -34 => 1, -35 => 1); 
if (isset($cities[$city])) { 
    $region = "noindex"; 
} 
+1

如果'$ city'是-36,怎麼辦?這種方法會發出通知。最好查看'isset()' – jprofitt 2012-03-16 01:45:21

+0

@jprofitt你是對的。我更新我的答案。 – 2012-03-16 01:48:09