我能以更清洁的方式实现这一目标吗?会真的被批评。
switch($vocation) {
case 1: $vocation = "Sorcerer"; break;
case 2: $vocation = "Druid"; break;
case 3: $vocation = "Paladin"; break;
case 4: $vocation = "Knight"; break;
case 5: $vocation = "Master Sorcerer"; break;
case 6: $vocation = "Elder Druid"; break;
case 7: $vocation = "Royal Paladin"; break;
case 8: $vocation = "Elite Knight"; break;
}
谢谢!
抱歉标题无法找出更好的标题
答案 0 :(得分:10)
您可以使用数组而不是switch语句。
$vocations = array("Sorcerer", "Druid" ...);
$vocationStr = $vocations[$vocation - 1];
或者
$vocations = array(1 => "Sorcerer", 2 => "Druid" ...);
$vocationStr = $vocations[$vocation];
就个人而言,我反对重复使用$ vocation来引用两种类型(整数和字符串),因为它们很可能是程序中的两个不同概念。
我还建议为这些值创建一个枚举类型,但这取决于上下文。
答案 1 :(得分:0)
那么,根据您使用它的原因(不确定没有上下文),一个选项是让您的可以在配置文件(可以是XML,文本文件等)中使用的可以读取在系统中即时。这样,如果您想要添加其他职业,您只需更新文本文件,而无需重建和/或重新部署您的来源。
答案 2 :(得分:0)
数组可以用于顺序键,但是否则使用关联数组(哈希)。
%vocations = array("key1"=>"value1", "key2"=>"value2", ...);
$vocationVal = $vocations{$vocationKey};
编辑:以上是perl语法,php语法如下:
$vocations = array(key1 => "value1", key2 => "value2", ...);
$vocationVal = $vocations[$vocationKey];
答案 3 :(得分:0)
使用已经提到的数组,或者至少使用constatants而不是switch语句中的普通整数。如下所示:
define("SORCERER", 1);
define("DRUID", 2);
...
define("RPALADIN", 7);
define("EKNIGHT", 8);
switch($vocation) {
case SORCERER: $vocation="Sorcerer"; break;
case DRUID: $vocation="Druid"; break;
...
case RPALADIN: $vocation="Royal Paladin"; break;
case EKNIGHT: $vocation="Elder Knight"; break;
}
这样在类之间添加新的类和排名就容易多了。
答案 4 :(得分:0)
这为您的列表中找不到的职业初始值提供了一个陷阱。
$vocations = array(1=>"Sorcerer", 2=>"Druid", ...);
if (array_key_exists($vocation, $vocations)) {
$vocation = $vocations[$vocation];
} else {
$vocation = 'Not found';
}
答案 5 :(得分:0)
答案 6 :(得分:0)
我在这里没有看到的另一个选项是将数据保存在表格中。如果列表变得庞大,它将有所帮助。
vocation_id vocation_name
1 sorcerer
2 druid
etc....
select vocation_name form vocations where vocation_id=3