2016-01-21 176 views
1

我想要做一些简单的事情 - 将数值与数组中的项目进行比较,然后根据比较结果运行条件。foreach循环中的条件

这里是我的数组:

$states = ['AL','AR','CT','DE','FL','GA','IL','IN','IA','KS','KY','LA','ME','MD','MA','MI','MN','MS','MO','NE','NH','NJ','NY','NC','ND','OH','OK','PA','RI','SC','SD','TN','TX','VT','VA','WV','WI']; 

这里是我的代码跟我的foreach功能的其余部分:

$region = ''; 
$array_length = count($states); 
foreach($states as $state_item){ 
    if($state_item == $state) { 
     $region = 'E'; 
    } else { 
     $region = 'W'; 
    } 
} 

echo $region; 

到目前为止,我的代码只成功获取到我的病情,并打印出ELSE部分W.因此,它甚至不计算IF部分。自从完成PHP以来已经很长时间了。请提醒我/纠正我是否有更好的方法来完成此任务。

$state正在通过查询从数据库中拉出并正常工作。

因为它没有向我发出服务器错误(500)而声明为$states = array(...)的数组已终止使用FOREACH LOOP。

+0

use if(strcmp($ state_item,$ state)== 0);或$ state_item === $ state; –

回答

3

您的代码存在的问题是,在$state_item == $statetrue$regionE后,foreach循环继续运行。在下一次迭代$state_item == $statefalse,并且$region被覆盖为W

要解决它,你的代码:

$region = 'W'; 
foreach($states as $state_item){ 
    if($state_item == $state) { 
     $region = 'E'; 
     break; // stop here 
    } 
} 

一个更好的办法来做到这一点:

if (in_array($state, $states)) { 
    $region = 'E'; 
} else { 
    $region = 'W'; 
} 
+0

非常感谢!这真的有帮助,并且非常有意义!我在开始使用foreach循环之前尝试过的第二种解决方案。 in_array在我的本地主机上完美工作,但服务器当前运行PHP版本5.3.3,它不支持in_array(尝试使用它时也会给出500错误)。这不是我的个人服务器,它有多个网站,更新php版本会很复杂。因此,循环。 –

+0

'in_array'存在于php4中:您确定500错误不是别的吗?检查你的日志。如果这对你有用,然后考虑接受这个答案之一。 – Federkun

1

我喜欢三元操作简单的情况下,像这样的:

$region = in_array($state, $states) ? 'E' : 'W'; 
+0

in_array会很美,在我的本地主机上完美运行,但服务器当前运行的是php 5.3.3版本,并且不支持in_array(尝试使用它时也会出现500错误)。因此,循环。 –

+1

[in_array](http://php.net/in_array)是在php 4中引入的。你的500错误有另一个原因。您可以将以下代码放在脚本的末尾,并查看实际的错误:error_reporting(E_ALL); ini_set('display_errors',1); –

-1

代替循环可以直接使用三元运算符:

$region = in_array($state, $states) ? 'E' : 'W'; 
+0

in_array会很漂亮,在我的本地主机上完美工作,但服务器当前运行PHP 5.3.3版本,并且不支持in_array(尝试使用它时也会出现500错误)。因此,循环。 –