2016-01-21 257 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錯誤)。因此,循環。 –