foreach循环中的条件

时间:2016-01-21 21:34:52

标签: php arrays

我正在尝试做一些简单的事情 - 将值与数组中的项进行比较,然后根据比较运行条件。

这是我的数组:

$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正在通过查询从数据库中提取并正常运行。

结束使用带有声明为$states = array(...)的数组的FOREACH循环,以免它向我抛出服务器错误(500)。

3 个答案:

答案 0 :(得分: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';
}

答案 1 :(得分:1)

对于像这样的简单案例,我更喜欢三元运算符:

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

答案 2 :(得分:-1)

而不是循环,你可以直接使用三元运算符:

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