尝试根据 2 个字母代码显示完整的大陆名称
Trying to display full continent name based on 2 letter code
我需要显示站点访问者所在的大陆。我正在使用 geoip 功能来提取 2 个字母的代码,我可以很容易地开始工作。但是,只向站点访问者显示亚洲的 'AS' 显然是不可取的。所以我正在尝试转换它。这就是我想要做的。 . .
<?php
$continent = geoip_continent_code_by_name($_SERVER['REMOTE_ADDR']);
$africa = array('AF');
$antarctica = array('AN');
$asia = array('AS');
$europe = array('EU');
$northamerica = array('NA');
$oceania = array('OC');
$southamerica = array('SA');
if ($africa) {
echo 'Africa';
}
elseif ($antarctica) {
echo 'Antarctica';
}
elseif ($asia) {
echo 'Asia';
}
elseif ($europe) {
echo 'Europe';
}
elseif ($northamerica) {
echo 'North America';
}
elseif ($oceania) {
echo 'Australia and Oceania';
}
elseif ($southamerica) {
echo 'South America';
}
else {
echo '';
}
?>
无论站点访问者在哪里,它都只显示 'Africa',所以它会卡在那里。我正在阅读 PHP 教程,但无法弄清楚我做错了什么。据我所知,我的 if、else 和 elsif 看起来不错。
好吧,你有点搞错了。
您在第一行就得到了正确的代码,但随后您创建了一堆不同的数组,每个数组都包含一个可能的代码。然后你检查每个数组是否存在,因为你刚刚创建它们,它们确实存在,所以你的 IF 块将在第一次检查和输出 Africa 时停止。
你想要做的是创建一个数组,其中包含所有代码作为键,输出名称作为值,然后只需使用你从 $_SERVER 获得的代码到 return 来自的匹配值那个数组。 (我从手册中得到了代码列表)
$continent = geoip_continent_code_by_name($_SERVER['REMOTE_ADDR']);
$continents = [
'AF' => 'Africa',
'AN' => 'Antarctica',
'AS' => 'Asia',
'EU' => 'Europe',
'NA' => 'North America',
'OC' => 'Oceania',
'SA' => 'South America',
];
echo $continents[$continent];
值得对您的 IF 块为何以其方式运行的原因进行一些解释。 PHP 是松散类型的,这意味着您不必显式设置变量的类型。所以当 PHP 遇到一个变量时,它必须猜测如何使用它。因此,当您说 if($africa)
时,php 试图在布尔问题的上下文中理解 $africa
,并且由于它确实存在并且不是 0 或 false,因此它将其视为 TRUE
并执行第一个块。
我需要显示站点访问者所在的大陆。我正在使用 geoip 功能来提取 2 个字母的代码,我可以很容易地开始工作。但是,只向站点访问者显示亚洲的 'AS' 显然是不可取的。所以我正在尝试转换它。这就是我想要做的。 . .
<?php
$continent = geoip_continent_code_by_name($_SERVER['REMOTE_ADDR']);
$africa = array('AF');
$antarctica = array('AN');
$asia = array('AS');
$europe = array('EU');
$northamerica = array('NA');
$oceania = array('OC');
$southamerica = array('SA');
if ($africa) {
echo 'Africa';
}
elseif ($antarctica) {
echo 'Antarctica';
}
elseif ($asia) {
echo 'Asia';
}
elseif ($europe) {
echo 'Europe';
}
elseif ($northamerica) {
echo 'North America';
}
elseif ($oceania) {
echo 'Australia and Oceania';
}
elseif ($southamerica) {
echo 'South America';
}
else {
echo '';
}
?>
无论站点访问者在哪里,它都只显示 'Africa',所以它会卡在那里。我正在阅读 PHP 教程,但无法弄清楚我做错了什么。据我所知,我的 if、else 和 elsif 看起来不错。
好吧,你有点搞错了。
您在第一行就得到了正确的代码,但随后您创建了一堆不同的数组,每个数组都包含一个可能的代码。然后你检查每个数组是否存在,因为你刚刚创建它们,它们确实存在,所以你的 IF 块将在第一次检查和输出 Africa 时停止。
你想要做的是创建一个数组,其中包含所有代码作为键,输出名称作为值,然后只需使用你从 $_SERVER 获得的代码到 return 来自的匹配值那个数组。 (我从手册中得到了代码列表)
$continent = geoip_continent_code_by_name($_SERVER['REMOTE_ADDR']);
$continents = [
'AF' => 'Africa',
'AN' => 'Antarctica',
'AS' => 'Asia',
'EU' => 'Europe',
'NA' => 'North America',
'OC' => 'Oceania',
'SA' => 'South America',
];
echo $continents[$continent];
值得对您的 IF 块为何以其方式运行的原因进行一些解释。 PHP 是松散类型的,这意味着您不必显式设置变量的类型。所以当 PHP 遇到一个变量时,它必须猜测如何使用它。因此,当您说 if($africa)
时,php 试图在布尔问题的上下文中理解 $africa
,并且由于它确实存在并且不是 0 或 false,因此它将其视为 TRUE
并执行第一个块。