0

我有几条产品线,产品具有各种功能。我有一个为每个产品制作的图纸列表,下面是图纸中表示的产品线、产品和功能的示例。

在此处输入图像描述

我试图弄清楚,当给定具有所有功能的特定产品(即表中的单行)时,围绕这些功能构建我的代码以选择正确的图纸的最有效最简洁的方法是什么?

我总是可以做类似的事情

if ($product == "A" 
    && $motor == true
    && $feet == 3 
    && $outlet == true
    && $manual == false) 
    getDrawing("A_motor_3_outlet_no_manual.jpg");

并最终得到与表中的行一样多的扁平 if 语句。但必须有更好的方法。我认为这可能与基数有关,或者可能与产品每个属性中选项的可变性有关。出于某种原因,确切的概念使我无法理解。

例如,我有一种感觉,最好先检查产品是否有电机,因为一旦你知道它会消除大约一半的选项并更快地缩小范围。即在主外部 if 块中执行以下操作:

if ($motor == true) 
{
   //7 drawings left to check
}
else
{
   //6 drawings left to consider
}

而不是这样的:

if ($feet == 1) 
{
   //still 10 rows left to consider
}
else if ($feet == 2)
{
   //just 2 options left to check
}
else if ($feet == 3)
{
    //one option only left:
    getDrawing("B_motor_3_no_outlet_manual.jpg");
}

但也许我只是想多了,只需要一个包含所有属性的查找表,也许像

getDrawing($lookup[$product][$motor][$feet][$outlet][$manual]);

关于查找表最好使用哪种属性顺序以及是否重要的​​问题仍然存在。

问题:

是否有“最佳” if-then-else 块嵌套顺序来决定产品属性,以最大限度地减少代码必须做出的总体决策总数,还是我需要放弃这种思路而只使用查找表? 为什么或者为什么不?

编辑:顺便说一句..这看起来是使用数据库的好人选..但我总共只有 48 行,可以直接将它们编码成代码。这将是只读的,根本不会经常更新,所以我正在考虑使用多维数组来编码这些数据。

4

2 回答 2

1

这就是数据库的用途。您将能够使用一个简单的SELECT语句来准确找到您需要的内容。即使现在它只有一张只有很少行的表,这也是我想要的方式。

如果您真的想在脚本中存储所有内容,您可以继续对每个产品的属性进行哈希处理,并将哈希值用作查找表的键。当给定某些产品属性时,您可以将它们散列并检索相应的图形。

于 2014-10-02T21:24:28.867 回答
0

您可以将数据编码为图形文件名。与您对第一个if语句所做的完全一样。例如:

$filename = $product."_".$feet."_".($outlet ? "true":"false")."_".($manual ? "manual":"no_manual")."jpg";
if (!file_exists($filename)) $filename = "missing.jpg";

这将把所有的麻烦排除在外,并简化代码。

于 2014-10-02T21:29:07.067 回答