【发布时间】:2021-08-07 15:46:42
【问题描述】:
我需要显示网站访问者所在的大陆。我正在使用 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 '';
}
?>
无论网站访问者在哪里,它都只会显示“非洲”,所以它会卡在那里。我正在阅读 PHP 教程,但无法弄清楚我做错了什么。据我所知,我的 if、else 和 elsif 看起来不错。
【问题讨论】:
-
奇怪的是有一个
geoip_country_name_by_name来获取国家name,而不是大陆。 -
确实,我实际上花了 15 或 20 分钟试图找到与国家全名对应的大陆,我想它一定在某个地方,但正如你所说,它根本不存在。跨度>
-
您在哪里比较从 IP 查找到数组的给定大陆?
if ($africa)是不恰当的比较 -
是的,值得稍微解释一下为什么该行会以这种方式运行。 PHP 是松散类型的,这意味着您不必显式设置变量的类型。所以当 PHP 遇到一个变量时,它必须猜测如何使用它。因此,当您说 if($africa) 时,php 会尝试在布尔问题的上下文中理解 $africa,并且由于它确实存在并且不是 0 或 false,因此它返回 true。