2011-03-06 78 views
0

我有這個下面的代碼: -我想要的東西不同的變量,它通過stristr但不能包含任何東西,除了這3個不同的東西

$unitedstatess = stristr($ad['country'], 'united states'); 
      $unitedkingdom = stristr($ad['country'], 'united kingdom'); 
      $canada = stristr($ad['country'], 'canada'); 

      if (($unitedstatess != FALSE) OR ($unitedkingdom != FALSE) OR ($canada != FALSE)) { $adsptc4.=$tempcode; } 

如果$廣告[「國家」]有美國,王國或加拿大,那麼它應該通過或否則如果除了上述以外還有其他值,它應該在其他地方休息。例如: - 廣告1有:(美國;英國)>然後它應該通過$ adsptc4 廣告2有:(美國;意大利)>然後它應該失敗。

讓我知道如果你不明白的東西。

<? 
$ad['country'] = "United States;canada"; 
$allowed = array(
    'united states' => true, 
    'united kingdom' => true, 
    'canada' => true 
); 
$countries = strtolower($ad['country']); 
$countries = explode(";", $countries); 
$found = false; 
foreach($countries as $c) { 
    if(isset($allowed[$c]) == FALSE) { 
     $found = true; 
     break; 
    } 
} 
if($found != true) { 
    echo "true"; 
} 
else { 
    echo "false"; 
} 
?> 

工程很好,讓我知道是否有任何缺點。

回答

1

您可以將所有「允許」條目存儲在數組中。

$allowed = array('united states', 'united kingdom', 'canada'); 
$input = strtolower($ad['country']); 
if(array_search($input, $allowed) !== false) { 
    //your true code 
} 
else { 
    //your else code 
} 

isset()函數:與array_search()或isset()函數

array_search()檢查

$allowed = array(
    'united states' => true, 
    'united kingdom' => true, 
    'canada' => true 
); 
$input = strtolower($ad['country']); 
if(isset($allowed[$input])) { 
    //true 
} 
else { 
    //false 
} 

找到條目,它們必須完全相同,因此$允許的所有條目都是小寫字母,而您的輸入$ ad ['country']更改爲小寫。

這兩種選擇都是可能的。我更喜歡第二個,因爲我可以給出一些額外的信息(而不是真的,我可以給一個特殊的數組或其他東西),可以處理。

你的第二個修改後:

可以爆炸給國家和檢查每個:

$countries = strtolower($ad['country']); 
$countries = explode(";", $countries); 
$found = true; 
foreach($countries as $c) { 
    $c = trim($c); 
    if(!isset($allowed[$c])) { 
     $found = false; 
     break; 
    } 
} 
if($found == true) { 
    //true 
} 
else { 
    //false 
} 
+1

我的錯,我糾正它。 – 2011-03-06 15:19:22

+0

我更新了主帖,請閱讀。 – friendishan 2011-03-06 15:24:41

+1

我也更新了我的帖子。 – 2011-03-06 15:35:28