【问题标题】:Display image from an array based on a variable根据变量显示数组中的图像
【发布时间】:2013-02-13 18:43:28
【问题描述】:

根据用户所在的国家/地区,我想加载存储在数组中的国家/地区的标志图像。目前只知道switch方法,如下:

$countryFlags = array("afghanistan.png", "albania.png", "algeria.png", "andorra.png" ... );

// gets the user country from DB
$userCountry = $country['Country'];

switch($userCountry) {
    case "Australia":
        echo /* the image name from countryFlags array */ ; break;
    case "America":
        echo /* the image name from countryFlags array */ ; break;
    default:
        echo("Unknown");
}

..但是写条件需要一段时间,我相信一定有更好的方法吗?

【问题讨论】:

  • 为什么不完全摆脱数组,使用国家名称,将其小写(使用strtolower())并查看是否有该名称的PNG file_exists()
  • @Pekka웃 嗯..但名称不完全匹配,有些可能不同,它仍然有效吗?

标签: php arrays list country


【解决方案1】:

假设您可以控制命名为什么不简单:

$userCountry = $country['Country'];

echo strtolower($userCountry) . ".png";

在命令行中给它“美国”将提供america.png 返回。

如果您不能这样做,请按如下方式构建您的数组:

$countryFlags = array(
  "America" => "america.png",
  "Afganistan" => "afganistan.png",
  ...etc...
);

echo $countryFlags[$userCountry];

编辑::

以上两者的混合搭配

//Define list of countries that aren't a direct translation
$countryFlags = array(
  "Canada" => "cdn_flag.png",
  "Mexico" => "mexico.jpg",
);

if ( !in_array($userCountry,$countryFlags) ) {
  echo strtolower($userCountry) . ".png";
} else {
   echo $countryFlags[$userCountry];
}

【讨论】:

  • hmm..但是名称(来自 db 和文件名)不完全匹配,有些不同,那我想它不会起作用?
  • @Nimbuz 在这种情况下使用他答案的第二部分。
  • 有275个名字,我不想手动写,就是这样:)
  • 如果你的 db 和 .png 文件之间没有命名约定,那么数组似乎是最好的选择。它们有何不同?你能用正则表达式匹配它们吗?
  • 是的,这是一个不幸的事实,你要么在名称上强加一个标准,这样你就可以做一个像 #1 或类似的技巧,或者花时间写出你的常量列表,以便以后引用.
【解决方案2】:

创建一个以国家代码为键,图像 URL 为值的数组:

$countryFlags = array();
$countryFlags['za'] = images/za.png;
$countryFlags['us'] = images/us.png;
// etc...

echo $countryFlags[$userCountryCode];

【讨论】:

  • 顺便说一句,我喜欢使用 sprite 作为图像标志,这里有一个很好的来源 ;) flag-sprites.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2017-01-18
  • 2012-07-18
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多