2013-11-01 6 views
0

Я пытаюсь собрать геодетекцию для изменения небольших языковых переменных.if (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

Также не работают со стандартным 1 одномерного массивом

$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 возвращает countryName и countryCode поля. Просто используйте countryCode вместо countryName и ваш код будет работать:

if($ip_data && $ip_data->geoplugin_countryCode != null) 
    { 
     $result = $ip_data->geoplugin_countryCode; 
    } 
Смежные вопросы