2013-10-31 83 views
0

我有此陣列,其從API提供地理限制信息,這是在內容被阻止國家的數組列表:匹配混淆邏輯與PHP中的兩個數組?

陣列([0] => GU [1] => PR [2 ] => CA [3] => VI [4] => US [5] => UM [6] => AS [7] => MP [8] => DE)

現在,我有另一個陣列,它存儲像這樣的國家代理信息:

$proxies['US'] = 'my_us_proxy_url; 
$proxies['DE'] = 'my_de_proxy_url; 
$proxies['UK'] = 'my_uk_proxy_url; 
$proxies['NL'] = 'my_nl_proxy_url; 

我想獲得VA代理允許用戶繞過國家限制,即$proxies[KEY]值,其中KEY不存在於第一個陣列中。

這是我嘗試過的片段之一,但像其他所有內容一樣,這不是所需的邏輯。

  $isBlocked = array_values; 
      //print_r($isBlocked); 
      if (in_array('US',$isBlocked)) 
      { 
       echo 'US Blocked'; 
       foreach ($isBlocked as $value) { 

        if (!array_key_exists($value,$proxies)){ 
         //Find first non blocked proxy and continue 
         echo "<br/>" . $value ; 
        } 
       } 

      } 
+0

如果您用另一種變體編輯上面的代碼的代碼 –

+0

你會得到什麼execpt語法錯誤。 – Stacked

回答

1

使用$key => $value結構在foreach循環:

foreach ($proxies as $key => $value) { 
    if (!in_array($key, $isBlocked)){ 
     //Find first non blocked proxy and continue 
     echo "<br/>" . $value ; 
    } 
} 

Demo!

+0

謝謝,@Amal工作(10分鐘後只能選擇正確的答案)。這個地方很棒,我在3分鐘內就得到了解決方案。 – Stacked

+0

@Stacked:不客氣。很高興能有幫助:) –

0

通過array_keys獲得從代理陣列的關鍵。通過array_diff獲得與其他陣列的區別。大型數組可能比foreach循環更便宜。

+0

'array_diff'似乎是一種聰明的做法。感謝分享。 – Stacked

+0

@Stacked,Alma Do anser更好 - 同樣的結果,保存一個函數調用。 –

2

這將是:

$data = ['GU', 'PR', 'CA', 'VI', 'US', 'UM', 'AS', 'MP', 'DE ']; 
$proxies['US'] = 'my_us_proxy_url'; 
$proxies['DE'] = 'my_de_proxy_url'; 
$proxies['UK'] = 'my_uk_proxy_url'; 
$proxies['NL'] = 'my_nl_proxy_url'; 

$result = array_diff_key($proxies, array_flip($data)); 
+0

+1因爲在PHP5之前沒有被卡住 –

+0

@EikePierstorff實際上,它是關於使用PHP 5.5(對我來說)。但大多數時候我必須關心OP的PHP版本。 –