Php 基于变量显示数组中的图像

Php 基于变量显示数组中的图像,php,arrays,list,country,Php,Arrays,List,Country,根据用户的国家,我希望加载存储在数组中的国家的国旗图像。目前我只知道切换方法,如: $countryFlags = array("afghanistan.png", "albania.png", "algeria.png", "andorra.png" ... ); // gets the user country from DB $userCountry = $country['Country']; switch($userCountry) { case "Australia":

根据用户的国家,我希望加载存储在数组中的国家的国旗图像。目前我只知道切换方法,如:

$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");
}

。。但是写条件需要一段时间,我相信一定有更好的方法可以做到这一点?

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

$userCountry = $country['Country'];

echo strtolower($userCountry) . ".png";
在命令行中给它“America”将提供
America.png
return

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

$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];
}

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

$userCountry = $country['Country'];

echo strtolower($userCountry) . ".png";
在命令行中给它“America”将提供
America.png
return

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

$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];
}

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

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

echo $countryFlags[$userCountryCode];

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

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

echo $countryFlags[$userCountryCode];

为什么不完全去掉数组,使用国家名称,小写(使用
strtolower()
)并查看是否存在该名称的PNG
file_()
?@Pekka웃 嗯..但是名称不是完全匹配的,有些可能是不同的,它还能工作吗?为什么不完全去掉数组,使用国家的名称,小写(使用
strtolower()
)并查看是否存在该名称的PNG
file_()
?@Pekka웃 嗯..但是名称不是完全匹配的,有些可能不同,它仍然有效吗?嗯..但是名称(来自db和文件名)不是完全匹配的,有些不同,我想它不会起作用吗?@Nimbuz在这种情况下使用他的答案的第二部分。有275个名称,我不想手动编写,这就是问题:)如果db和.png文件之间没有命名约定,那么数组似乎是最好的选择。它们有什么不同?你能用正则表达式匹配它们吗?是的,这是一个不幸的事实,你要么在名称上强制一个标准,这样你就可以做像#1或类似的把戏,要么花时间写出你的常量列表,以后可以引用。嗯……但是名称(来自db和文件名)并不完全匹配,有些是不同的,我想这样不行?@Nimbuz在这种情况下使用他的答案的第二部分。共有275个名称,我不想手动编写,问题是:)如果db和.png文件之间没有命名约定,那么数组似乎是最好的选择。它们有什么不同?你能用正则表达式匹配它们吗?是的,这是一个不幸的事实,你要么在名称上强制使用一个标准,这样你就可以做像#1或类似的把戏,要么花时间写出你的常量列表,以后可以引用。顺便说一句,我喜欢用精灵作为图像标志,这是一个很好的来源;)顺便说一下,我喜欢使用精灵作为图像标志,这里有一个很好的来源;)