2013-11-01 80 views
0

我正试图拼凑一个用于改变轻微语言变量的地理检测。如果(in_array)没有正确执行

我有检测工作完美,但数组检查似乎不工作,我需要知道它是否从一个国家的名单。如果我呼应该国,那么我会得到正确的名称,以便我知道这些零件能够正常工作。

//Get User Country 

$country_arr = array(
    "Canada" => "ca", 
    "United States" => "us", 
    "United Kingdom" => "uk", 
    "Australia" => "au", 
    "South Africa" => "za", 
    "Unknow" => "shot" 
); 

$country=visitor_country(); 

if (in_array($country, $country_arr)) { 
    //include ("languages/" . $lang . ".php"); 
    //echo $country_arr[$country]; 
    echo "yes 
"; 
} else { 
    //include ("languages/en.php"); 
    echo "no 
"; 
} 

echo $country; 

与所有相关的代码工作和食用http://sandbox.onlinephpfunctions.com/code/714d5105012f28cada695a6f11dc61516722e6d7

还没有一个标准的一个维数组

$count_array = array("South Africa", "Unknow"); 
+0

我不知道您可以使用数组作为针,或者您想使用array_intersect? –

+0

什么显示'var_dump($ country)'你确定你正在搜索的价值,而不是关键? –

+0

$国家可能是空的 –

回答

1

使用阵列array_key_exists代替in_array

//Get User Country 

$country = visitor_country(); 

$country_arr = array(
"Canada" => "ca", 
"United States" => "us", 
"United Kingdom" => "uk", 
"Australia" => "au", 
"South Africa" => "za", 
"Unknown" => "shot" 
); 


//$count_array = array("South Africa", "Unknown"); 

if (array_key_exists($country, $country_arr)) { 
//include ("languages/" . $lang . ".php"); 
//echo $country_arr[$country]; 
echo "yes<br>"; 
} else { 
    //include ("languages/en.php"); 
    echo "no<br>"; 
} 

echo $country; 

对于in_array功能,您$country_arr阵列应该是这样的

/* For IN Array */ 
$country_arr = array(
    "Canada", 
    "United States", 
    "United Kingdom", 
    "Australia", 
    "South Africa", 
    "Unknown" 
); 

您的$count_array = array("South Africa", "Unknow");不工作,因为$country返回Unknown,并且您有Unknow与数值不匹配。

+0

谢谢,这工作。 – RemeJuan

1

正与in_array一个正常运作的沙箱您检查值没有钥匙。

//Get User Country 

$country_arr = array(
    "Canada" => "ca", 
    "United States" => "us", 
    "United Kingdom" => "uk", 
    "Australia" => "au", 
    "South Africa" => "za", 
    "Unknow" => "shot" 
); 

$country = 'Canada'; 

if (isset($country_arr[$country])) 
{ 
    echo "yes"; 
} 
else 
{ 
    echo "no"; 
} 

echo "\n$country"; 

BTW

记住,PHP甚至与 '常规' 阵列 - 无按键 - 有隐含键,以便为in_array工作,你就必须有:

$country_arr = array("Canada", "United States", "United Kingdom"); 

以上所有国家都有自己的钥匙(但隐含),所以国家在这里是价值观。在您的原始代码国家是关键。

0

你有一个错字 - Unknow/Unknown,还,你不in_array()对搜索键,您需要使用array_key_exists()array_flip($country_arr)

-1

你GeoIP的服务回报countryNamecountryCode领域。只需使用countryCode而不是countryName,你的代码将工作:

if($ip_data && $ip_data->geoplugin_countryCode != null) 
    { 
     $result = $ip_data->geoplugin_countryCode; 
    }