我有一些产品线,产品有各种各样的特点。我有一个为每个产品绘制的图纸列表,下面是产品线、产品和功能在图纸中的表示示例。
我试图弄清楚,当给定一个具有所有特性(即表中的一行)的特定产品时,围绕这些特性构造代码、选择正确图形的最有效、最简洁的方法是什么?
我总是能做些

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行,可以直接编码成代码。这将是只读的,不会经常更新,所以我考虑使用多维数组来编码这些数据。

最佳答案

这就是数据库的用途。您将能够使用一个简单的SELECT语句来准确地找到所需的内容。即使现在只有一张表只有很少的行,我也会这么做。
如果您真的想在脚本中存储所有内容,那么可以继续对每个产品的属性进行散列,并使用散列值作为查找表的键。当给定某些产品属性时,可以对它们进行散列并检索相应的图形。

关于algorithm - 如何最好地从查找表中获取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26169751/

10-12 15:54