2012-03-16 61 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