将这些 if/elseif 语句替换为更简洁的内容

  • 本文关键字:简洁 替换 语句 if elseif php
  • 更新时间 :
  • 英文 :


好的,我已经在脚本上工作了大约一个星期了。在游戏(runescape)中,有被称为城堡的内容。您所做的是每周收集资源以进行维护和升级(如果有的话)。维护是保持城堡地块正常运行的每周成本,否则它们会退化。维护成本的每个级别或级别都会发生变化。升级是您要升级或建造的任何东西(新地块)。在将任何资源应用于任何升级之前,必须先满足维护要求。每周每个玩家只能限制一定数量的资源。好了,现在我已经明白了,可以解释我想要完成的事情。将有一个表单将每个情节的级别传递给脚本。所以我正在做的是:

if($citadel = '1'){
$wood_upkeep = "1500";
$stone_upkeep = "0";
$bar_upkeep = "0";
$pbar_upkeep = "0";
$cloth_upkeep = "0";
$rations_upkeep = "0";
}elseif($citadel = '2'){
$wood_upkeep = "3600";
$stone_upkeep = "0";
$bar_upkeep = "0";
$pbar_upkeep = "0";
$cloth_upkeep = "0";
$rations_upkeep = "0";
}elseif($citadel = '3'){
$wood_upkeep = "2975";
$stone_upkeep = "2550";
$bar_upkeep = "0";
$pbar_upkeep = "0";
$cloth_upkeep = "0";
$rations_upkeep = "0";
}elseif($citadel = '4'){
$wood_upkeep = "1690";
$stone_upkeep = "1500";
$bar_upkeep = "1500";
$pbar_upkeep = "0";
$cloth_upkeep = "0";
$rations_upkeep = "0";
}elseif($citadel = '5'){
$wood_upkeep = "2250";
$stone_upkeep = "2300";
$bar_upkeep = "2200";
$pbar_upkeep = "100";
$cloth_upkeep = "0";
$rations_upkeep = "0";
$cap_limit = "2000";
}elseif($citadel = '6'){
$wood_upkeep = "2470";
$stone_upkeep = "1495";
$bar_upkeep = "1690";
$pbar_upkeep = "1365";
$cloth_upkeep = "2210";
$rations_upkeep = "0";
$cap_limit = "2350";
}elseif($citadel = '7'){
$wood_upkeep = "2800";
$stone_upkeep = "400";
$bar_upkeep = "1600";
$pbar_upkeep = "2000";
$cloth_upkeep = "3000";
$rations_upkeep = "3000";
$cap_limit = "2700";
}

乘以 10 个图,这是很多代码(超过 500 行)。我计算了一下,它会超过2000行代码,只是为了吐出实现x升级/维护所需的一些"封盖器"。这些 if/elseif 语句所做的只是根据 tier(lvl) x 图来分配成本值。然后我使用成本值并将它们全部相加并除以每周上限限制,这将给我实现 x 升级 + 维护所需的封盖者数量。我很确定有一种更简单的方法可以做到这一点,只是不知道如何或什么。

使用开关大小写

/* zeroing the values as suggested by @paul-t */
$wood_upkeep = "0";
$stone_upkeep = "0";
$bar_upkeep = "0";
$pbar_upkeep = "0";
$cloth_upkeep = "0";
$rations_upkeep = "0";
switch($citadel) {
case '1':
$wood_upkeep = "1500";
break;
case '2':
$wood_upkeep = "3600";
break;
case '3':
$wood_upkeep = "2975";
$stone_upkeep = "2550";
break;
.
.
.
case 'n':
//statements here
break;

}

我现在想到了三个主要的解决方案:

  1. 使用开关(城堡)+外壳。

  2. 准备具有这些值的关联数组,例如:

    $citadelParams[1] = 数组("wood_upkeep" => "3600", "stone_upkeep = "0", ...);

您可以通过以下方式访问这些值:

$citadelParams[$citadel_id]["wood_upkeep"];
  1. 这是我最喜欢的。只需使用 xml 或 json 文件来存储这些值并在代码中读取它们。无需在代码中对值进行硬编码,即使您不是程序员,也可以轻松查找和更改此特定文件中的值:)

与#3一起使用的一些有用的东西:

  • file_get_contents读取文件到字符串
  • json_decode用file_get_contents解析之前读取的字符串(我建议使用第二个参数作为 TRUE,这样您就可以简单地获得关联数组作为回报并像 #2 中一样使用它)

个人而言,(如果这是针对游戏之类的)。 我会将这些值中的每一个作为数组存储在它们自己的文件中。 几乎就像一个配置。 所以你会有这样的文件

文件城堡1.php

<?php
return [
'wood_upkeep' => "1500",
'stone_upkeep' => "0",
'bar_upkeep' => "0",
'pbar_upkeep' => "0",
'cloth_upkeep' => "0",
'rations_upkeep' => "0",
];

然后,您只需根据$citadel的值加载文件

$values = include "{$pathtofile}/citadel{$citadel}.php";

这样您就可以更好地组织它们。 对于其他事情,例如您可能有一个包含配置的citadel文件夹,然后您有一个用于blacksmith等的文件夹。 比挖掘代码找到它们更容易。

home/
buildings/
citadel/
citadel1.php
citadel2.php
citadel3.php
citadel4.php
citadel5.php
blacksmith/
... etc.

另外,假设您要升级$citadel = '6'只需复制文件以进行citadel5.php,更改一些内容,将其另存为citadel6.php然后设置$citadel to = 6无需更改代码。

它很漂亮,如果需要的话没有。

注意 - 像这样从文件中分配一个 var,如果我没记错的话,仅适用于include

您甚至可以使用 php 保存它们。

file_put_contents('citadel5.php', "<?phpnreturn ".var_export($values, true ).";");

最新更新